zoukankan      html  css  js  c++  java
  • 洛谷 P2796 Facer的程序 题解

    题面

    一个树形DP,

    f[i]=表示以i为根可以得到的子树个数;

    则f[i]*=(f[j]+1);

    初始化f[i]=1;

    ans=sigma(f[i]);

    #include <bits/stdc++.h>
    #define p 1000000007
    using namespace std;
    struct littlestar{
        int to;
        int nxt;
    }star[200010];
    int head[200010],cnt;
    void add(int u,int v)
    {
        star[++cnt].to=v;
        star[cnt].nxt=head[u];
        head[u]=cnt;
    }
    long long f[100010];
    void dfs(int u,int fa)
    {
        for(int i=head[u];i;i=star[i].nxt){
            int v=star[i].to;
            if(v==fa) continue;
            dfs(v,u);
            f[u]=(f[u]*(f[v]+1))%p;
        }
    }
    signed main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) f[i]=1;
        for(int i=1;i<=n-1;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            add(u,v);
            add(v,u);
        }
        dfs(1,0);
        long long ans=0;
        for(int i=1;i<=n;i++){
            ans=(ans+f[i])%p;
        }
        cout<<ans%p;
        return 0;
    }
  • 相关阅读:
    iPhone iPad发展史
    iOS 学习
    iOS 学习
    iOS 学习
    iOS 学习
    iOS 学习
    iOS 学习
    iOS 学习
    iOS 学习
    iOS 学习
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11412167.html
Copyright © 2011-2022 走看看