0分求助,样例输出6,悬赏关注
查看原帖
0分求助,样例输出6,悬赏关注
546681
lcbridgeAK CSP-S楼主2023/2/10 20:58

RT,谢谢

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000+5;
const int mod=10e9+7;
vector <int> tree[maxn];
int n,k,f[maxn][4],flag[maxn];
bool vis[maxn];
void dp(int x){
	for(int i=0;i<tree[x].size();i++){
		int now=tree[x][i];
		if(!vis[now]){
			vis[now]=1;
			dp(now);
			f[now][1]=(f[now][1]*(f[x][2]+f[x][3])%mod)%mod;
			f[now][2]=(f[now][2]*(f[x][1]+f[x][3])%mod)%mod;
			f[now][3]=(f[now][3]*(f[x][1]+f[x][2])%mod)%mod;
		}
	}
}
int main() {
	scanf("%d%d",&n,&k);
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		tree[u].push_back(v);
		tree[v].push_back(u);
	}
	for(int i=1;i<=k;i++){
		int u,x;
		scanf("%d%d",&u,&x);
		flag[u]=x;
	}
	for(int i=1;i<=n;i++){
		if(!flag[i])f[i][1]=f[i][2]=f[i][3]=1;
		else f[i][flag[i]]=1;
	}
	dp(1);
	printf("%d",(f[1][1]+f[1][2]+f[1][3])%mod);
	return 0;
}  
2023/2/10 20:58
加载中...