额……只能说我短路了……
对于任意数来说 异或两次一个数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;
}