比赛 2026.5.16 评测结果 WWAWWWWWWAAAWWWWAAAA
题目名称 不是一道路径查询问题 最终得分 40
用户昵称 VTXE 运行时间 2.304 s
代码语言 C++ 内存使用 17.60 MiB
提交时间 2026-05-16 09:33:18
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll n,m,q,v;
ll fa[110000][70];
bool vis[70];

ll find(ll xx,ll yy){
	if (fa[xx][yy]==xx) return xx;
	else{
		fa[xx][yy]=find(fa[xx][yy],yy);
		return fa[xx][yy];
	}
}

int main(){
	freopen("Paths.in","r",stdin);
	freopen("Paths.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m>>q>>v;
	for (int i=1;i<=n;i++){
		for (int j=0;j<=62;j++){
			fa[i][j]=i;
		}
	}
	for (int j=60;j>=0;j--){
		if (v&(1ll<<j)){
			vis[j]=1;
		}
	}
    for (int i=1;i<=m;i++){
    	ll u,v,w;
    	cin>>u>>v>>w;
    	for (int j=60;j>=0;j--){
    		bool c=(w&(1ll<<j));
    		if (!vis[j]&&c) fa[find(u,j)][j]=find(v,j);
    		else if (vis[j]&&!c) break;
		}
		if ((w&v)==v) fa[find(u,61)][61]=find(v,61);
	}
	for (int i=1;i<=q;i++){
		ll u,v;
		cin>>u>>v;
		bool c=0;
		for (int j=61;j>=0;j--){
			if (find(u,j)==find(v,j)){
				c=1;
				break;
			}
		}
		if (c) cout<<"Yes\n";
		else cout<<"No\n";
	}
    return 0;
}