BZOJ1907 樹的路徑覆蓋

2021-08-02 08:24:46 字數 1164 閱讀 9383

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

v,0,

fv,1

) 的最小值和次小值 fx

,0=m

in(s

um+m

n) f

x,1=

min(

sum+

mn+m

n−1)

死於-1打成+1

tm這都過了樣例!ex

m!!?

#include 

#include

#include

#include

#include

#include

#define n 10005

#define mod 1000000007

#define inf 0x7fffffff

using

namespace

std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const ull base=31;

ll read()

while(isdigit(ch))

return x*f;

}int t,n,cnt;

int b[n<<1],p[n],nextedge[n<<1];

int f[n][2];

void add(int x,int y)

void anode(int x,int y)

void dfs(int x,int fa)

int main()

return

0;}

BZOJ 1907 樹的路徑覆蓋

題目描述 輸入 輸出樣例輸入 1 71 2 2 32 4 4 65 6 6 7 樣例輸出 3 題解 比較裸的樹形dp。對於任意節點x,只有三種情況,x單獨成鏈,x與子樹中的其中一條鏈成一條鏈,x與子樹中的兩條鏈成一條鏈。include include include define n 10010 d...

BZOJ1907 樹的路徑覆蓋(貪心)

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

BZOJ 1907 樹的路徑覆蓋 樹形DP

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