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];
    }
  • 相关阅读:
    会计期间勿关闭后台打开
    动态创建VIEW
    约束变量
    JS 图片懒加载
    如何在Javascript中对数组的遍历使用异步函数
    JavaScript之闭包
    面试:数组去重你会几种呀?
    JavaScript重构技巧-降低函数复杂度
    JavaScript的内置对象
    js/jQuery获取data-*属性值
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11405958.html
Copyright © 2011-2022 走看看