zoukankan      html  css  js  c++  java
  • [USACO17DEC] Barn Painting

    (f[i][j])(i)子树,当(i)(j)时的方案数

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    const int mod = 1e+9+7;
    vector <int> g[N];
    int vis[N],n,m,t1,t2,f[N][4],c[N];
    
    void dfs(int p) {
        vis[p]=1;
        int flag = 0;
        f[p][1]=f[p][2]=f[p][3]=1;
        for(int i=0;i<g[p].size();i++) {
            int q=g[p][i];
            if(vis[q]) continue;
            flag = 1;
            dfs(q);
            for(int j=1;j<=3;j++) {
                int tmp=0;
                for(int k=1;k<=3;k++) {
                    if(j!=k) tmp+=f[q][k];
                }
                f[p][j]*=tmp, f[p][j]%=mod;
            }
        }
        if(c[p]) {
            for(int i=1;i<=3;i++) {
                if(i==c[p]) continue;
                f[p][i]=0;
            }
        }
    }
    
    signed main() {
        scanf("%lld%lld",&n,&m);
        for(int i=1;i<n;i++) {
            scanf("%lld%lld",&t1,&t2);
            g[t1].push_back(t2);
            g[t2].push_back(t1);
        }
        for(int i=1;i<=m;i++) {
            scanf("%lld%lld",&t1,&t2);
            c[t1]=t2;
        }
        dfs(1);
        cout<<(f[1][1]+f[1][2]+f[1][3])%mod<<endl;
    }
    
  • 相关阅读:
    SpringMVC扩展
    反射机制
    python day9
    python day8
    python day7
    python day6
    python day4
    python day3
    python day2
    python day1
  • 原文地址:https://www.cnblogs.com/mollnn/p/12266371.html
Copyright © 2011-2022 走看看