重建道路 樹上揹包

2021-10-20 17:46:53 字數 1414 閱讀 2306

//初始化

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 ...