zoukankan      html  css  js  c++  java
  • P3914 染色计数

    ——————————————————————————————————————————————————————

    普通树形计数题,就是犯了个傻逼错误

    ——————————————————————————————————————————————————————

    #include<bits/stdc++.h>
    using namespace std;
    const int mod=1000000007;
    int n,m,ne,head[5200],a,b,f[5050][5050],sum[5200],tot[5200];
    struct node {int to,nxt;}eg[5200<<1];
    void adde(int u,int v){eg[++ne].to=v;eg[ne].nxt=head[u];head[u]=ne;}
    void dfs(int u,int fa)
    {
        for(int i=head[u];i;i=eg[i].nxt)if(eg[i].to!=fa)dfs(eg[i].to,u);
        for(int j=1;j<=m;j++)
        if(f[u][j])
        {
            for(int i=head[u];i;i=eg[i].nxt)
            {
                int v=eg[i].to;
                if(v==fa)continue;
                f[u][j]=1LL*f[u][j]*(tot[v]-f[v][j])%mod;
            }
            while(f[u][j]<0)f[u][j]+=mod;
            tot[u]=(1LL*f[u][j]+1LL*tot[u])%mod;
        }
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {scanf("%d",&b);sum[i]=b;
        while(b--){scanf("%d",&a);f[i][a]++;}}
        for(int i=1;i<n;i++){scanf("%d%d",&a,&b);adde(a,b);adde(b,a);}
        adde(0,1);dfs(0,0);
        cout<<tot[1];
    }
  • 相关阅读:
    HTML5新特性,新的 Input 类型
    HTML5新特性,拖放(Drag 和 Drop)
    剑指 Offer 32
    剑指 Offer 28. 对称的二叉树
    993. 二叉树的堂兄弟节点
    897. 递增顺序查找树
    872. 叶子相似的树
    637. 二叉树的层平均值
    617. 合并二叉树
    559. N叉树的最大深度
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11405958.html
Copyright © 2011-2022 走看看