0分help
查看原帖
0分help
767863
封禁用户楼主2024/12/27 19:48
#include<iostream>
#include<cstdio> 
#include<queue>
using namespace std;
int n,m,k,dis[100010],vis[100010],s,head[100010],cnt;
struct u
{
	int v,w,netx;
};
u edge[200010];
struct node
{
	int x,y;
};
struct cmp
{
	bool operator()(node xx,node yy)
	{
		return xx.x>yy.x;
	}
};
priority_queue<node,vector<node>,cmp>q;
void add(int u,int v,int w)
{
	edge[++cnt].v=v;
	edge[cnt].w=w;
	edge[cnt].netx=head[u];
	head[u]=cnt;
}
int main()
{
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
		add(v,u,w);
	}
	while(k!=0)
	{
		k--;
		int x,yy;
		scanf("%d%d",&x,&yy);
		for(int i=1;i<=n;i++)
		{
			dis[i]=0x7fffffff;
		}
		dis[1]=0;
		q.push({0,1});
		while(!q.empty())
		{
			int uk=q.top().y;
			q.pop();
			if(vis[uk]) continue;
			vis[uk]=1;
			for(int i=head[uk];i;i=edge[i].netx)
			{
				if((dis[edge[i].v]>edge[i].w^dis[uk]))
				{
					dis[edge[i].v]=edge[i].w^dis[uk];
					q.push({dis[edge[i].v],edge[i].v});
				}
			}
		}
		cout<<(dis[x]^dis[yy])<<endl;
	}
	return 0;
}
2024/12/27 19:48
加载中...