1 条题解
-
0
#include <bits/stdc++.h> #define int long long #define mk make_pair #define PII pair<int,int> #define FOR(i,j,k) for(int i=(j);i<=(k);++i) #define ROF(i,j,k) for(int i=(j);i>=(k);--i) #define FOI(a,b) for(auto a : b) #define wh while #define inf 0x3f3f3f3f3f3f3f3f #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define snd second #define fst first #define pb push_back #define CI const int #define NP namespace using NP std; int quickpow(int a,int b) { int ans=1; wh(b) { if(b&1)ans=ans*a; a=a*a; b>>=1; } return ans; } CI MAXN=1e5+5; struct edge { int _,__,___; }; int f[MAXN][105],n,m,v,q,cnt=0; vector<edge> g; int find(int x,int p) { if(x==f[x][p])return x; return f[x][p]=find(f[x][p],p); } void merge(int x,int y,int p) { int fx=find(x,p),fy=find(y,p); if(fx==fy)return; f[fx][p]=fy; } signed main(void) { freopen("dis.in","r",stdin); freopen("dis.out","w",stdout); IOS cin>>n>>m>>v; FOR(i,1,m) { int _,__,___; cin>>_>>__>>___; g.pb({_,__,___}); } for(int x=v;x<=(1ll<<60);x+=(x&-x)) { ++cnt; FOR(i,1,n) { f[i][cnt]=i; } FOI(e,g) { if((e.___&x)>=x) { merge(e._,e.__,cnt); } } if(!x)break; } cin>>q; wh(q--) { int l,r; cin>>l>>r; int flag=false; FOR(i,1,cnt) { if(find(l,i)==find(r,i)) { flag=true; } } if(flag)cout<<"Yes\n"; else cout<<"No\n"; } return false; }
信息
- ID
- 7321
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 14
- 已通过
- 2
- 上传者