- 题解
会的发源码
- @ 2026-10-6 14:03:51
#GESP202406C71. 这是原题 发源码的时候 记得分行!!!!!!!!!!!!!! 有正确的我会给你回复一个枪战网址
2 条评论
-
-
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 5; vector tree[MAXN]; int color[MAXN]; // 0: 白色, 1: 黑色 int vis[MAXN]; // 子树中黑色节点计数 int n, root, num = 0, ans = 0; void dfs(int u, int fa) { vis[u] = color[u]; // 如果节点是黑色,计数为1 for (int v : tree[u]) { if (v == fa) continue; dfs(v, u); vis[u] += vis[v]; // 累加子节点黑色数量 } } int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> color[i]; for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; tree[u].push_back(v); tree[v].push_back(u); } // 找第一个黑色节点作为根 for (int i = 1; i <= n; i++) { if (color[i] == 1) { root = i; break; } } dfs(root, 0); for (int i = 1; i <= n; i++) ans += (vis[i] > 0); cout << ans - accumulate(color+1, color+n+1, 0) << endl; return 0; }
- 1