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


    水一道计数题,增加博客数目(雾)

    #include<bits/stdc++.h>
    using namespace std;
    const int mod=1000000007;
    int n,m,ne,head[100005],a,b,dp[100005][4];
    struct node {int to,nxt;}eg[100005<<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 i=head[u];i;i=eg[i].nxt)
        {
            int v=eg[i].to;
            if(v==fa)continue;
            dp[u][1]=(1ll*dp[u][1]*(dp[v][2]+dp[v][3]))%mod;
            dp[u][2]=(1ll*dp[u][2]*(dp[v][3]+dp[v][1]))%mod;
            dp[u][3]=(1ll*dp[u][3]*(dp[v][1]+dp[v][2]))%mod;    
        }
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<n;i++)
        {
            cin>>a>>b;
            adde(a,b);
            adde(b,a);
            dp[i][1]=dp[i][2]=dp[i][3]=1;
        }dp[n][1]=dp[n][2]=dp[n][3]=1;
        while(m--)
        {
            cin>>a>>b;
            if(b==1)dp[a][2]=dp[a][3]=0;
            if(b==2)dp[a][1]=dp[a][3]=0;
            if(b==3)dp[a][1]=dp[a][2]=0;
        }
        dfs(1,0);
        cout<<(1ll*dp[1][1]+1ll*dp[1][2]+1ll*dp[1][3])%mod;
    }

  • 相关阅读:
    百度地图API示例之小实践 添加代理商标注
    MySQL分组操作
    MySQL连表操作
    MySQL多对多操作
    MySQL一对一操作
    MySQL唯一索引
    MySQL用户授权管理
    MySQL外键操作
    MySQL删操作
    MySQL增操作
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11406035.html
Copyright © 2011-2022 走看看