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
  • 相关阅读:
    论文阅读 | MobileNetV2: Inverted Residuals and Linear Bottlenecks
    论文阅读 | MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
    ResNet代码实现
    第二次作业:卷积神经网络 part 1
    第一次作业:深度学习基础
    对于当下和未来的一点点思考
    第六周:生成式对抗网络
    第五周:卷积神经网络 part3
    HybridSN 高光谱分类网络的优化
    第四周:卷积神经网络 part3
  • 原文地址:https://www.cnblogs.com/onlyRP/p/5289536.html
Copyright © 2011-2022 走看看