爆0求调!
查看原帖
爆0求调!
654763
smallpeople楼主2024/2/26 09:41
#include<bits/stdc++.h>
using namespace std;

long long n,k,p,mod = 1e9 + 7;
long long bk[100005],f[100005][4];//f[x][i]把x染成i色的方案数 
vector <int> q[1000005];

void dfs(int u)
{
	bk[u] = 1;
	for(int i = 0;i < q[u].size();i ++)
	{
		int s = q[u][i];
		if(bk[s])continue;
		dfs(s);
		f[u][1] = (f[u][1] * ((f[s][2] + f[s][3]) % mod)) % mod;
		f[u][2] = (f[u][2] * ((f[s][1] + f[s][3]) % mod)) % mod;
		f[u][3] = (f[u][3] * ((f[s][1] + f[s][2]) % mod)) % mod;
	}

	return;
}

int main()
{
	cin>>n>>k;
	for(int i = 1;i < n; i++)
	{
		int a,b;
		cin>>a>>b;
		q[a].push_back(b);
		q[b].push_back(a);

		//初始化,放一块了 
		f[i][1] = 1;
		f[i][2] = 1;
		f[i][3] = 1;
	}
	int p = 0;
	for(int i = 1;i <= k;i ++)
	{
		int a,c;
		cin>>a>>c;
		
		//初始化,放一块了 
		f[a][1] = 0;
		f[a][2] = 0;
		f[a][3] = 0;
		f[a][c] = 1;
		if(a == 1)p = c;
	}
	
	dfs(1);
	
	long long ans;
	//if(p)ans = f[1][p] % mod;
	ans = ((f[1][1] + f[1][2]) % mod + f[1][3]) % mod;
	cout<<ans<<'\n';
	return 0; 
}

60分,WA 4,6,7,9,把数据下下来发现4号点爆0。求大佬帮调!

2024/2/26 09:41
加载中...