BZOJ 1907 樹的路徑覆蓋

2021-08-09 14:18:32 字數 712 閱讀 9771

題目描述 輸入

輸出樣例輸入 1

71 2

2 32 4

4 65 6

6 7

樣例輸出 3

題解:比較裸的樹形dp。對於任意節點x,只有三種情況,x單獨成鏈,x與子樹中的其中一條鏈成一條鏈,x與子樹中的兩條鏈成一條鏈。

#include #include #include #define n 10010

#define inf 0x3f3f3f3f

using namespace std;

int head[n] , to[n << 1] , next[n << 1] , cnt , fa[n] , son[n] , f[n] , g[n];

void add(int x , int y)

void init(int x)

void dfs(int x)

f[x] = sum + min(t , 1);//對於1的情況是x單獨成鏈;

if(son[x] < 2) return;

int m1 = inf , m2 = inf;

for(i = head[x] ; i ; i = next[i])//尋找x與其中兩條鏈成一條鏈的情況

}g[x] = sum + m1 + m2 - 1;

}int main()

return 0;

}

BZOJ1907 樹的路徑覆蓋

bzoj1907 其實挺sb 的乙個樹形dp 我這種sb 都會的樹形dp 我的做法很鬼畜。fx 0,f x,1 分別表示點 x 作為轉折點 也就是連成乙個 v字形 非轉折點,覆蓋該子樹的最小路徑數。記v 為x的兒子節點,su m m in f v,0,fv,1 mn mn 為fv 0 m in f ...

BZOJ1907 樹的路徑覆蓋(貪心)

我是超連結 看上去像網路瘤題?嗯很明顯想多了,這可是一棵樹啊 然後陷入一臉不可做的狀態。翻翻翻 以某乙個點為根的子樹,這個點只有兩種狀態 拐彎 兩條簡單路徑在乙個點交匯成一條,折折折 和直上 一條路走到黑 我們優先滿足拐彎的情況,貪心!貪心策略是 只要當前點能成為拐點,就讓它成為拐點。也就是說,貪心...

BZOJ 1907 樹的路徑覆蓋 樹形DP

題目大意 給定一棵樹,求最小路徑覆蓋 資料範圍1w,看到還想跑網路流來著 不過算了明明樹形dp這麼水還是不要用網路流這種大殺器為好 首先將所有的鏈都考慮成以鏈上所有點的lca為轉折點的v字形 那麼點有兩種 轉折點和非轉折點 因此我們選擇兩種狀態進行轉移 還會和父親組成鏈的狀態和成為轉折點的狀態 轉移...