急急急!!!WA#7#8!!
查看原帖
急急急!!!WA#7#8!!
889828
Wangbingxiang楼主2024/10/23 22:14
#include<bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3f;
long long n,m,q,x,y,z;
long long dis[100001],vis[100001];
long long head[400001],tot;
struct Edge{
	long long to,nxt,w;
}e[400001];
priority_queue <pair<long long,long long> > p;
void add(long long u,long long v,long long w){
	e[++tot].to=v;
	e[tot].w=w;
	e[tot].nxt=head[u];
	head[u]=tot;
}
void d(long long x){
	dis[x]=0;
	p.push({0,x});
	while(!p.empty()){
		long long u=p.top().second;p.pop();
		if(vis[u]) continue;
		vis[u]=1;
		for(long long i=head[u];i;i=e[i].nxt){
			long long v=e[i].to;
			if(dis[u]^e[i].w<dis[v]){
				dis[v]=dis[u]^e[i].w;
				p.push({-1*dis[v],v});
			}
		}
	}
}
int main(){
	scanf("%lld%lld%lld",&n,&m,&q);
	for(long long i=1;i<=n;++i){vis[i]=0;dis[i]=inf;}
	for(long long i=1;i<=m;i++){
		scanf("%lld%lld%lld",&x,&y,&z);
		add(x,y,z);
		add(y,x,z);
	}
	d(1);
	while(q--){
		scanf("%lld%lld",&x,&y);
		cout<<(dis[y]^dis[x])<<endl;
	}
	return 0;
}

2024/10/23 22:14
加载中...