zoukankan      html  css  js  c++  java
  • NC20857 Xor Path(dfs)

    考虑一个点被使用的奇偶次

    这种题如果是边的话,就是经典套路

    现在是点,其实可以把他周围的边都计算一遍就知道这个点用了多少次

    同时不要忘了加上以他为顶点的n-1条路

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int N=1e6+10;
    const ll inf=0x3f3f3f3f3f3f3f3f;
    const int mod=1e9+7;
    int h[N],ne[N],e[N],idx;
    ll sz[N],a[N];
    ll ans;
    int n;
    void add(int a,int b){
        e[idx]=b,ne[idx]=h[a],h[a]=idx++;
    }
    void dfs(int u,int fa){
        sz[u]=1;
        int i;
        ll sum=n-1;
        for(i=h[u];i!=-1;i=ne[i]){
            int j=e[i];
            if(j==fa)
                continue;
            dfs(j,u);
            sz[u]+=sz[j];
            sum+=(sz[j])*(n-sz[j]);
        }
        sum+=(sz[u])*(n-sz[u]);
        sum/=2;
        if(sum%2){
            ans^=a[u];
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        memset(h,-1,sizeof h);
        int i;
        cin>>n;
        for(i=1;i<n;i++){
            int a,b;
            cin>>a>>b;
            add(a,b);
            add(b,a);
        }
        for(i=1;i<=n;i++)
            cin>>a[i];
        dfs(1,0);
        cout<<ans<<endl;
        return 0;
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    windows照样命令行gcc/g++
    我的Linux(Ubuntu)首秀
    简单分频原理与实现——计数器
    时序分析之Arrival Time
    DDS正弦信号发生器
    C/C++ 预处理器
    时序分析之Slack
    iOS单例
    static
    深浅拷贝
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/14465566.html
Copyright © 2011-2022 走看看