設$f[x][i][j]$表示以$x$為根的子樹,與$x$連通部分有$i$個黑點,$j$個白點,不聯通部分都是均衡的最小代價。若$i>1$,則視作$1$;若$j>2$,則視作$2$。
然後進行樹形dp即可,轉移的時候如果不要那棵子樹,那麼那棵子樹的狀態必須滿足$!i||j<2$。
時間複雜度$o(n)$。
#include#define rep(i,n) for(int i=0;i='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void up(ll&a,ll b)
inline void add(int x,int y,int z)
inline int fix(int x)
void dfs(int x,int y)
rep(a,2)rep(b,3)f[x][a][b]=h[a][b];
} rep(a,2)rep(b,3)h[a][b]=inf;
rep(a,2)rep(b,3)if(f[x][a][b]rep(a,2)rep(b,3)f[x][a][b]=h[a][b];
}int main()
return 0;
}
BZOJ 3257 樹的難題
3257 樹的難題 time limit 10 sec memory limit 128 mb submit 56 solved 39 submit status discuss description 給出乙個無根樹。樹有n個點,邊有權值。每個點都有顏色,是黑色 白色 灰色這三種顏色之一,稱為一棵...
bzoj3257 樹的難題
description 給出乙個無根樹。樹有n個點,邊有權值。每個點都有顏色,是黑色 白色 灰色這三種顏色之一,稱為一棵三色樹。可愛的 alice覺得,乙個三色樹為均衡的,當且僅當,樹中不含有黑色結點 或者含有至多乙個白色節點。然而,給出的三色樹可能並不滿足這個性質。所以,alice打算刪去若干條邊...
1900 985的「樹」難題
time limit 1 sec memory limit 128 mb 985給你一棵 樹 以及它的根節點,要求你先判定它是否是一棵樹,其次他想知道每個節點的 太子 數目以及它的父親 root的話輸出自己 太子判定條件 一 若x是y的孩子節點,那麼x是y的 太子 二 若x是y的 太子 且y是z的 ...