社区讨论

求助

P4084[USACO17DEC] Barn Painting G参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo981njl
此快照首次捕获于
2023/10/28 07:05
2 年前
此快照最后确认于
2023/10/28 07:05
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define rint register int
#define inf 0x3f3f3f3f
#define MAXN 200001
#define ll long long
using namespace std;
inline ll read(){
	ll res=0,fs=1;
	char c=getchar();
	while(!(c>='0' && c<='9')){
		if(c=='-')fs=-1;
		c=getchar();
	}
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
const ll MOD=1e9+7;
ll n,k,a[MAXN],f[MAXN][3]; 
vector<int> e[MAXN];
inline void dfs(int x,int fa){
	if(a[x]==3)f[x][1]=f[x][2]=f[x][0]=1;
	else f[x][1]=f[x][2]=f[x][0]=0,f[x][a[x]]=1;
	for(rint i=0;i<e[x].size();i++){
		int y=e[x][i];
		if(y!=fa){
			dfs(y,x);
			for(rint j=0;j<3;j++){
				f[x][j]=((f[y][(j+1)%3]+f[y][(j+2)%3])%MOD)*f[x][j]%MOD;
			}
		}
	}
}
int main() { 
	int x,y;
	n=read(),k=read();
	for(rint i=1;i<n;i++){
		x=read(),y=read();
		e[x].push_back(y);
		e[y].push_back(x);
	}
	for(rint i=1;i<=n;i++)a[i]=3;
	for(rint i=1;i<=k;i++)a[read()]=read()-1;
	dfs(1,0);
	ll ans=(f[1][0]+f[1][1]+f[1][2])%MOD;
	cout<<ans<<'\n';
    return 0;
}
样例可过,第一个点下载下来就是样例,但还是挂 Link

回复

1 条回复,欢迎继续交流。

正在加载回复...