一年前自己還是太菜了。
雖然現在也菜。
一棵樹,選擇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...