1 条题解

  • 0
    @ 2026-8-17 22:17:42
    #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;
    }
    
    
    
    
    
    
    
    
    
    • 1

    信息

    ID
    7321
    时间
    2000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    14
    已通过
    2
    上传者