zoukankan      html  css  js  c++  java
  • bzoj 2819

    说好卡dfs的。。本来还想在选根上动下手脚,看来不用辣23333

    身为蒟蒻怎么可能会博弈论,度娘告诉我们只需要判断异或和==0就行了

    然后链剖+BIT就可以了(用BIT后链剖头一次这么短,不过我没感觉到就是了,BIT大法吼啊

    貌似dfs序也能做,太弱了还不会。。

     1 #include<bits/stdc++.h>
     2 #define inc(i,l,r) for(int i=l;i<=r;i++)
     3 #define dec(i,l,r) for(int i=l;i>=r;i--)
     4 #define link(x) for(edge *j=h[x];j;j=j->next)
     5 #define mem(a) memset(a,0,sizeof(a))
     6 #define inf 1e9
     7 #define ll long long
     8 #define succ(x) (1<<x)
     9 #define lowbit(x) (x&(-x))
    10 #define NM 500000+5
    11 using namespace std;
    12 int read(){
    13     int x=0,f=1;char ch=getchar();
    14     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    15     while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    16     return x*f;
    17 }
    18 struct edge{
    19     int t;
    20     edge *next;
    21 }e[2*NM],*h[NM],*o=e;
    22 void add(int x,int y){
    23     o->t=y;o->next=h[x];h[x]=o++;
    24 }
    25 int n,d[NM],f[NM],id[NM],top[NM],TOP,son[NM],size[NM],tot;
    26 int _x,_y,a[NM],b[NM],c[NM];
    27 void dfs1(int x){
    28     link(x)if(!f[j->t]){
    29         f[j->t]=x;d[j->t]=d[x]+1;
    30         dfs1(j->t);
    31         size[x]+=size[j->t];
    32         if(size[j->t]>size[son[x]])son[x]=j->t;
    33     }
    34     size[x]++;
    35 }
    36 void dfs2(int x){
    37     top[x]=TOP;id[x]=++tot;
    38     if(son[x])dfs2(son[x]);
    39     link(x)if(!top[j->t])dfs2(TOP=j->t);
    40 }
    41 void upd(int x,int t){
    42     for(;x<=n;x+=lowbit(x))a[x]^=t;
    43 }
    44 int sum(int x){
    45     int s=0;
    46     for(;x;x-=lowbit(x))s^=a[x];
    47     return s;
    48 }
    49 void query(int x,int y){
    50     int s=0;
    51     for(;top[x]!=top[y];x=f[top[x]]){
    52         if(d[top[x]]<d[top[y]])swap(x,y);
    53         s^=sum(id[x])^sum(id[top[x]]-1);
    54     }
    55     if(d[x]<d[y])swap(x,y);
    56     s^=sum(id[x])^sum(id[y]-1);
    57     puts(s?"Yes":"No");
    58 }
    59 int main(){
    60     freopen("data.in","r",stdin);
    61     n=read();
    62     inc(i,1,n)c[i]=read();
    63     inc(i,1,n-1){
    64         _x=read();_y=read();add(_x,_y);add(_y,_x);
    65     }
    66     f[1]=1;dfs1(1);dfs2(TOP=1);
    67     inc(i,1,n)upd(id[i],c[i]),b[id[i]]=c[i];
    68     int m=read();
    69     while(m--){
    70         char st[10];scanf("%s",st);_x=read();_y=read();
    71         if(st[0]=='Q')query(_x,_y);
    72         else upd(id[_x],b[id[_x]]^_y),b[id[_x]]=_y;
    73 //        inc(i,1,n)printf("%d ",b[i]);putchar('
    ');
    74 //        inc(i,1,n)printf("%d ",a[i]);putchar('
    ');
    75     }
    76     return 0;
    77 }
    View Code
  • 相关阅读:
    devise 异步发邮件
    ubuntutweak for lucid
    960gs blueprint
    Amoeba for mysql 0.31发布(读写分离、负载均衡、Failover、数据切分)
    Google App Servlet容器转型 – 从Tomcat到Jetty
    DBeaver
    用simple from暂不用formtastic
    [SQL Server]ORDER BY的问题
    PHP pathinfo() 函数
    php中使用head进行二进制流输出,让用户下载PDF等附件的方法
  • 原文地址:https://www.cnblogs.com/onlyRP/p/5289536.html
Copyright © 2011-2022 走看看