2 条题解
-
-1
#define MAXM 10010 #define INF 20000 using namespace std; struct node { int to, next; } e[MAXM << 1]; int head[MAXM], tot; int f[MAXM][3], m, n, c[MAXM]; void add(int u, int v) { tot++, e[tot].to = v, e[tot].next = head[u], head[u] = tot; } void init() { int i, u, v; scanf("%d%d", &m, &n); for (i = 1; i <= n; i++) scanf("%d", &c[i]); for (i = 1; i < m; i++) { scanf("%d%d", &u, &v); add(u, v), add(v, u); } for (i = 1; i <= m; i++) f[i][0] = f[i][1] = 1; } void dfs(int u, int fa) { int i, v; for (i = head[u]; i; i = e[i].next) { v = e[i].to; if (v == fa) continue; dfs(v, u); if (v <= n) f[v][!c[v]] = INF, f[v][2] = 1; f[u][0] += min(f[v][2], min(f[v][0] - 1, f[v][1])); f[u][1] += min(f[v][2], min(f[v][0], f[v][1] - 1)); f[u][2] += min(f[v][2], min(f[v][0], f[v][1])); } } int main() { init(); dfs(n + 1, -1); printf("%d\n", min(f[n + 1][2], min(f[n + 1][0], f[n + 1][1]))); return 0; }
信息
- ID
- 477
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 33
- 已通过
- 17
- 上传者