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字形 那麼點有兩種 轉折點和非轉折點 因此我們選擇兩種狀態進行轉移 還會和父親組成鏈的狀態和成為轉折點的狀態 轉移...