额……只能说我短路了……
对于任意数来说 异或两次一个数x 其值保持不变
我知道你们明白了……
贴代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=100010;
int to[maxn*2],head[maxn*2],next[maxn*2],cnt,dis[maxn],w[maxn*2];
inline void add(int x,int y,int v)
{
cnt++;to[cnt]=y;next[cnt]=head[x];head[x]=cnt;w[cnt]=v;
}
inline void dfs(int x)
{
int i=head[x];
while(i>0)
{
if(dis[to[i]]==-1&&to[i]!=1)
{
if(x==1)dis[to[i]]=w[i];
else dis[to[i]]=dis[x]^w[i];
dfs(to[i]);
}
i=next[i];
}
}
int main()
{
memset(dis,-1,sizeof(dis));
int n;
scanf("%d",&n);
int x,y,val;
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
scanf("%d",&val);
add(x,y,val);
add(y,x,val);
}
int m;
scanf("%d",&m);
dfs(1);
dis[1]=0;
for(int i=1;i<=m;i++)
{
int q1,q2;
scanf("%d%d",&q1,&q2);
if(q1==1)printf("%d\n",dis[q2] );
else if(q2==1)printf("%d\n",dis[q1]);
else printf("%d\n",dis[q1]^dis[q2]);
}
return 0;
}
本文探讨了在图论中使用异或运算的原理及其在解决特定问题时的优势,通过实例展示了如何利用异或特性进行路径查找和网络流优化。

520

被折叠的 条评论
为什么被折叠?



