題目:
久違地1a了好高興啊!
首先,要最大值最小,很容易想到二分;
判斷當前的 mid 是否可行,需要看看有沒有去掉一條邊使滿足的方案;
這就需要樹上差分來找出每條邊被幾個超過 mid 的路線覆蓋;
若有一條邊正好被所有超過 mid 的路線覆蓋,且去掉它之後最大的路線也能滿足,就是可行的。
**如下:
#include#include#include
using
namespace
std;
intconst maxn=3e5+5
;int
n,m,head[maxn],ct,cnt,st[maxn],ed[maxn],tag[maxn],lca[maxn],len[maxn];
int h[maxn],ans,mx,f[maxn][20
],dep[maxn],l,r,mid;
bool
flag;
struct
n}edge[maxn
<<1
];void add(int x,int y,int z)
void init(int x,int
fa)int lca(int x,int
y)void dfs(intx)}
bool
ck()
dfs(1);
return
flag;
}int
main()
init(
1,0);
for(int i=1;i<=m;i++)
l=0,r=mx;
while(l<=r)
printf("%d
",ans);
return0;
}
洛谷P2680 運輸計畫(樹上差分 二分)
傳送門 考慮樹上亂搞 首先這是滿足二分性質的,如果在某個時間可以完成工作那麼比他更長的時間肯定也能完成工作 然後考慮二分,設當前答案為 mid 如果有一條鏈的長度大於 mid 那麼這條鏈上必須得刪去一條邊。我們可以貪心的刪去所有可以刪去的邊中最長的,然後看看最長邊減去刪去的邊是否小於等於 mid 如...
洛谷 P2680 運輸計畫
公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航道連通了 l 國的所有星球。小 p 掌管一家物流公司,該公司有很多個運輸計畫,每個運輸計畫形如 有一艘物 流飛船需要從 ui 號星球沿最快的宇航路徑飛行到 vi 號星球...
P2680 運輸計畫 二分 樹上差分
又咕咕了幾天 qwq 我們先將原問題轉化為 log 2n 個判定問題 如何 ck x 把所有 x 的路徑在樹上標記 邊差分 然後找到被所有 x 路徑覆蓋的點 邊轉點,邊權下放點權 嘗試把這個點的權值改為零,檢查最長路徑的時間是否 leq x 若存在這樣的點,return true 否則 return...