Luogu5021 NOIP2018 賽道修建

2022-05-16 10:15:28 字數 766 閱讀 6185

luogu5021 [noip2018]賽道修建

一棵大小為 \(n\) 的樹,邊帶權。選 \(m\) 條鏈使得長度和最小的鏈最大。

\(m

貪心,二分答案

最小最大?二分

先看部分分

於是可以將兩種做法結合

對於每個節點,往上算貢獻、貪心匹配兩個兒子

至於實現,可以考慮 \(multiset\) ,也可以排序+二分

時間複雜度 \(o(n\log^2n)\) ,空間複雜度 \(o(n)\)

**

#include using namespace std;

const int maxn = 1e5 + 10;

int n, m, mid, h[maxn];

multiset s;

struct edges

} e[maxn << 1];

void addline(int u, int v, int w)

int dfs(int u, int f, int& l) else

}} l = 0;

while (!s.empty()) else

} return res;

}int main()

int l = 1, r = sum, res, tmp;

while (l <= r)

printf("%d", res);

return 0;

}

noip2018 luogu5021 賽道修建

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

NOIP2018 P5021 賽道修建

看到題意描述第一反應就是先二分那個修建的 mm 條賽道中長度最小的賽道的長度 k 然後 o n o n 或 o n log n o nlogn 判斷。那麼怎麼判斷呢?對於每個結點,把所有傳上來的值 valval 放進乙個 multisetmultiset 其實這些值對答案有貢獻就兩種情況 val k...

P5021 賽道修建 NOIP2018

傳送門 考場上把暴力都打滿了,結果檔案輸入輸出寫錯了.當時時間很充裕,如果認真想想正解是可以想出來的.問你 長度最小的賽道長度的最大值 顯然二分答案 考慮如何判斷是否可行 顯然對於乙個節點,它最多只能向父親傳一條路徑長度 那麼其它路徑的合併只能在子樹間進行 貪心一波,如果一段路徑在子樹就可以合併出合...