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; }
标签:cout,int,eg,USACO17DEC,100005,adde,P4084,Painting,dp 来源: https://www.cnblogs.com/SFWR-YOU/p/11406035.html