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