记录编号 |
589234 |
评测结果 |
AAAAAAAAWAAAWWWWTTTT |
题目名称 |
不是一道路径查询问题 |
最终得分 |
55 |
用户昵称 |
flyfree |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
6.274 s |
提交时间 |
2024-07-04 11:57:41 |
内存使用 |
33.12 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 100005
ll f[MAXN][100],s[MAXN];
ll find(ll idx,ll c){
// cout<<"find "<<idx<<" "<<c<<endl;
if(f[idx][c]==idx){
return idx;
}else return f[idx][c]=find(f[idx][c],c);
}
ll n,m,q,v,p=1,cnt;
int main(){
freopen("Paths.in","r",stdin);
freopen("Paths.out","w",stdout);
cin>>n>>m>>q>>v;
for(ll i=1;i<=60;i++){
ll k=v&1;
v/=2;
if(k){
for(ll j=1;j<=cnt;j++){
s[j]+=p;
}
}else{
s[++cnt]=p;
}
p*=2;
}
for(ll i=1;i<=cnt;i++)for(ll j=1;j<=n;j++)f[j][i]=j;
// for(ll i=1;i<=cnt;i++)cout<<s[i]<<endl;
for(ll i=1;i<=m;i++){
ll x,y,val;
cin>>x>>y>>val;
for(ll j=1;j<=cnt;j++){
if((val&s[j])==s[j]){
ll l=find(x,j),r=find(y,j);
f[l][j]=f[r][j];
}
}
}
for(ll i=1;i<=q;i++){
ll x,y;
cin>>x>>y;
ll ans=0;
for(ll j=1;j<=cnt;j++){
if(find(f[x][j],j)==find(f[y][j],j)){
ans=1;
break;
}
}
if(ans)cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}