求调
  • 板块灌水区
  • 楼主pengbonan
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/5 21:13
  • 上次更新2024/8/5 22:40:29
查看原帖
求调
1005693
pengbonan楼主2024/8/5 21:13

P4084

#include <iostream>
#include <vector>
#define int long long
using namespace std;
const int N = 1e5 + 10, p = 1e9 + 7;
vector <int> E[N];
int Color[N];
int dp[N][3];
int ans;
void dfs (int x, int fa) {
	if (Color[x])
		dp[x][Color[x]] = 1;
	else
		dp[x][0] = dp[x][1] = dp[x][2] = 1;
	for (auto k : E[x]) {
		if (k == fa)
			continue;
		dfs(k, x);
		dp[x][0] *= (dp[k][1] + dp[k][2]) % p;
		dp[x][1] *= (dp[k][0] + dp[k][2]) % p;
		dp[x][2] *= (dp[k][0] + dp[k][1]) % p;
		dp[x][0] %= p, dp[x][1] %= p, dp[x][2] %= p;
	}
}
signed main () {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	int n, k;
	cin >> n >> k;
	for (int i = 1; i < n; i ++) {
		int u, v;
		cin >> u >> v;
		E[u].emplace_back(v);
		E[v].emplace_back(u);  
	}
	for (int i = 1; i <= k; i ++) {
		int x, color;
		cin >> x >> color;
		Color[x] = color - 1;
	}
	dfs(1, 0);
	cout << (dp[1][0] + dp[1][1] + dp[1][2]) % p;
	return 0;
}

20pts,其他WA

2024/8/5 21:13
加载中...