CONTEST221 洛谷9月月赛Div.2 -P2420 让我们异或吧

来源:互联网 发布:迅雷 mac safari提示 编辑:程序博客网 时间:2024/05/18 01:43

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