//初始化
void
init()
struct edges edge[maxm <<1]
;//無向圖則需要乘2
inline
void
add(
int u,
int v)
; head[u]
= cnt;
}int dp[m]
[m], siz[m]
, tmp[m]
;int n, m;
void
dfs(
int u,
int fa)
} siz[u]
+= siz[v]
;for
(int j =
1; j <= siz[u]
;++j) dp[u]
[j]= tmp[j];}
}int
main()
memset
(dp,
0x3f
,sizeof dp)
;// 所有都初始化為最大值
dfs(1,
-1);
int ans = dp[1]
[m];
for(
int i =
2; i <= n;
++i)
if(siz[i]
>= m) ans =
min(ans, dp[i]
[m]+1)
;// 最終的答案不一定是在1號結點上去邊, +1是因為要加上去除連線父親結點的邊
printf
("%d"
, ans)
;return0;
}
樹上揹包 洛谷P1272 重建道路
我靠,就是乙個裸的樹上揹包 結果沒記起來,看題解也看不懂 然後看到一篇博文寫到了多叉轉二叉 就一下子都記起來了 f i j 表示在i點保留j個節點的最小割數 include define ll long long using namespace std const int n 200 struct ...
題解 洛谷P1272 重建道路 樹上揹包
樹上問題一直是我的乙個難點,逐個解決一下。注意,這個題意是錯的,正確題意見下方。給定n,p 150 n個點的有根樹,問最少選擇幾個沒有父子關係的節點,使得以這些節點為根的子樹的節點數目之和等於p.表示 設d p i j dp i j dp i j 表示在節點i ii及其子樹中,滿足子樹節點數目之和等...
樹上揹包練習
p2014 ctsc1997 選課 p2014 ctsc1997 選課 solution 樹上揹包模板題 因為有多節課是沒有先修課的,所以並不是只有一棵樹,用乙個0號點作為沒有先修課的課程的先修課,這樣就合併成了一棵樹,只要選取m 1個點 必選0 即可。轉移方程 dp u j max dp u j ...