• 牛客 Treepath(树形dp)


    这题只需要考虑奇偶性即可,答案就是到子节点偶数和*到本节点奇数以及子节点奇数和本节点偶数,之后更新数量

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=3e5+10;
    const int mod=1e9+7;
    int h[N],ne[N],e[N],idx;
    int depth[N];
    int f[N][2];
    ll ans;
    void add(int a,int b){
        e[idx]=b,ne[idx]=h[a],h[a]=idx++;
    }
    void dfs(int u,int fa){
        f[u][0]=1;
        for(int i=h[u];i!=-1;i=ne[i]){
            int v=e[i];
            if(v==fa)
                continue;
            dfs(v,u);
            ans+=f[u][0]*f[v][1]+f[u][1]*f[v][0];
            f[u][1]+=f[v][0];
            f[u][0]+=f[v][1];
        }
        return ;
    }
    int main(){
        int n;
        cin>>n;
        int i;
        memset(h,-1,sizeof h);
        for(i=1;i<n;i++){
            int a,b;
            scanf("%d%d",&a,&b);
            add(a,b);
            add(b,a);
        }
        dfs(1,-1);
        cout<<ans<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    AWR报告生成
    ios-html-get/post差额,简而言之(MS)CheckST
    2015第33周一
    2015第32周日
    2015第32周六
    2015第32周五
    2015第32周四
    2015第32周三
    2015第32周二
    2015第32周一
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12864951.html
Copyright © 2020-2023  润新知