luogu P5021 賽道修建

2021-09-27 09:24:41 字數 1322 閱讀 5980

一年前自己還是太菜了。

雖然現在也菜。

一棵樹,選擇m

mm條邊鋪設,要求這些邊不能有交集,且不允許掉頭(我們認為它是從一點修到另外一點的),現在求這些賽道的最短值的最大值。

現在看來還是乙個眼題的。

二分答案mid

midmi

d。考慮兒子的資訊通過當前的邊來合併。

若當前已經可以更新到mid

midmi

d,直接方案數加1

11即可。

若當前不能更新到mid

midmi

d,考慮從小到**出盡可能小的能與它配對達到mid

midmi

d的,將這兩個配對在一起(相當與這兩條路徑通過當前點連在一起),方案數加111。

最後傳上去最大的即可。

可用multiset

\text

multiset

維護即可。

注意multiset

\text

multiset

裡e ra

se

erase

eras

e刪除值是將全部為這個值的刪去。

#include

#include

#include

#include

#define id multiset::iterator

using

namespace std;

multiset<

int> f[

50010];

int n,m,len=

0,tot,limit,ans;

struct node a[

100010];

int last[

50010];

void

ins(

int x,

int y,

int z)

; last[x]

=len;

}void

dfs(

int x,

int fa)

else

}int ma=-1

;while

(f[x]

.size()

)if(ma!=-1

) f[x]

.insert

(ma);}

bool

check

(int x)

intmain()

while

(l<=r)

printf

("%d"

,ans)

;}

Luogu P5021 賽道修建

link c 城將要舉辦一系列的賽車比賽。在比賽前,需要在城內修建 m 條賽道。c 城一共有 n 個路口,這些路口編號為 1,2,n 有 n 1 條適合於修建賽道的雙向通行的道路,每條道路連線著兩個路口。其中,第 i 條道路連線的兩個路口編號為 a i 和 b i 該道路的長度為 l i 借助這 n...

luogu P5021 賽道修建

給定一顆樹 不是二叉樹 在樹上找到 m 條鏈。求最短鏈的最大值。其實在考場上想出正解了的。就是因為不會stl結果掛了。要是寫出來就1 了呢。氣死了。首先因為要求最短鏈的最大值,很容易想到二分。二分出最短鏈的長度 x 然後要在樹上找到 m 條長度大於 x 的鏈。分析問題,每條邊只能用一次,然後可以發現...

洛谷P5021 賽道修建

話說去年為什麼暴力炸成了15.其實我現在都不會做,參考的一位p黨大佬的題解,寫成了c 版而已 附註了一些關鍵部分的細節 總之現在弄懂了qwq includeusing namespace std const int maxn 1e6 10,maxm 2e6 10,inf 1e8 int bg max...