洛谷P4383 八省聯考2018 林克卡特樹

2021-10-03 03:20:32 字數 1558 閱讀 6881

題目描述 題解

題目可以轉化一下,就是要在原樹中選出 k+1

k+1k+

1 條不相交的鏈使得其權值和最大。

考慮暴力 dp

\text

dp : f[u

][i]

[0/1

/2

]f[u][i][0/1/2]

f[u][i

][0/

1/2]

表示 u

uu 子樹選了 i

ii 條鏈, u

uu 沒有連邊/有一條出邊/有兩條出邊的最大值,可惜是 o(n

k2

)o(nk^2)

o(nk2)

的過不去。

稍微感性理解一下,如果設選出 x

xx 的答案為 f(x

)f(x)

f(x)

的話,那應該是個上凸殼,所以可以採用 wqs

\text

wqs 二分把第二維消掉,具體來說就是選每條鏈的時候就 −mi

d-mid

−mid

,然後記錄一下取最大值的時候選了多少條鏈即可。效率 o(n

logc

)o(nlogc)

o(nlog

c)**

#include

#define ll long long

using

namespace std;

const

int n=

3e5+

5,m=n<<1;

const ll f=

-2e18

;ll c;

int n,k,hd[n]

,v[m]

,w[m]

,nx[m]

,t;struct oa,f[n][3

],g[3]

;bool

operator

<

(o a,o b)

o operator

+(o a,o b);}

void

add(

int u,

int v,

int w)

void

dfs(

int u,

int fr)

;f[u][1

]=(o);f[u][2

]=(o);

for(

int v,i=hd[u]

;i;i=nx[i]))

; f[u][2

]=max(f[u][2

],g[2]

+ax)

; f[u][2

]=max(f[u][2

],g[1]

+f[v][1

]+(o));}

}int

main()

c=l;

dfs(1,

0); cout<<

max(f[1]

[0],

max(f[1]

[1],f[1]

[2])

).x+c*k

}

洛谷4382 八省聯考2018 劈配

省選滾粗回家。滿懷信心的day2t1網路流。乙個半小時自信過樣例。然後就回家了。首先能很快的看出這是乙個網路流。第一問 我們考慮匹配,按順序列舉人,再按順序列舉優先順序,每次在前乙個優先順序的殘餘網路上加邊,跑最大流,若流量是1,則說明這是他的理論可能的最高優先順序,去做下乙個人,否則繼續列舉優先順...

洛谷4364 九省聯考2018 IIIDX

標籤 線段樹 題目傳送門 osu 聽過沒?那是konano 最喜歡的一款 遊戲,而他的夢想就是有一天自己也能做個獨特酷炫的 遊戲。現在,他在世界知名遊戲公司konmai 內工作,離他的夢想也越來越近了。這款 遊戲內一般都包含了許多歌曲,歌曲越多,玩家越不易玩膩。同時,為了使玩家在遊戲上氪更多的金錢花...

P4382 八省聯考 2018 劈配

題面自己看吧 std對於第一問,容易想到是二分圖匹配。具體模型 對於第二問,可以列舉這個學生要前進多少名。假設當前學生 i 前進 x 名。那麼把學生 i 的可以使他不沮喪的所有志願的所有邊連上。再把前 i x 1 名學生滿足第一問中的志願的邊連上。判斷是否滿流即可。總結 動態加邊網路流。includ...