[LOJ6175] 「美團 CodeM 初賽 Round B」黑白樹[樹形DP]
阿新 • • 發佈:2019-02-02
return max 染色 pre size turn urn lin 葉子
每次從當前的葉子往上DP(每條鏈上沒有染色的深度最大點視為葉子),先看子樹裏的點能不能染到這個點,染不到就++ans,把這個點的k傳上去,能染到的話要chmax(k[fa[u]], k[u]-1)
vint G[MAXN]; int k[MAXN], fa[MAXN], ans; inline int dfs(int u) { int cur = 0; for (int i = 0; i < G[u].size(); i++) chmax(cur, dfs(G[u][i])); if (cur <= 1) return ++ans, k[u]; chmax(k[fa[u]], k[u] - 1); return cur - 1; } int main() { int n; scanf("%d", &n); lop(i, 2, n) scanf("%d", fa + i), G[fa[i]].pb(i); lop1(i, n) in, k[i]; ans = 0; dfs(1); out, ans; return 0; }
[LOJ6175] 「美團 CodeM 初賽 Round B」黑白樹[樹形DP]