比赛 |
2024暑期C班集训3 |
评测结果 |
AAAAAAAAATAATTTTTTTT |
题目名称 |
不是一道路径查询问题 |
最终得分 |
55 |
用户昵称 |
liuyiche |
运行时间 |
9.599 s |
代码语言 |
C++ |
内存使用 |
11.28 MiB |
提交时间 |
2024-07-03 11:16:12 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m, q;
bool vis[100010];
ll V;
struct node
{
vector<int> nxt;
vector<ll> w;
};
vector<node> p(100010);
ll f[1005][1005];
inline void dfs(int st, int x, ll cnt)
{
vis[x] = 1;
f[st][x] = max(f[st][x],cnt);
for(int i = 0; i < p[x].nxt.size(); ++i)
{
if(vis[p[x].nxt[i]] == 0)
{
if(cnt == -1)
dfs(st,p[x].nxt[i],p[x].w[i]);
else
dfs(st,p[x].nxt[i],cnt&p[x].w[i]);
}
}
vis[x] = 0;
}
int main()
{
freopen("Paths.in", "r", stdin);
freopen("Paths.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m >> q >> V;
for(int i = 1; i <= m; ++i)
{
int u, v;
ll w;
cin >> u >> v >> w;
p[u].nxt.push_back(v);
p[v].nxt.push_back(u);
p[u].w.push_back(w);
p[v].w.push_back(w);
}
for(int i = 1; i <= n; ++i)
dfs(i,i,-1);
/*for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
cout << f[i][j] << " ";
cout << '\n';
}*/
for(int i = 1; i <= q; ++i)
{
int u, v;
cin >> u >> v;
if(f[u][v] >= V)
cout << "Yes" << '\n';
else
cout << "No" << '\n';
}
return 0;
}