LCA,二分,樹上差分 洛谷 2680 運輸計畫

2022-06-12 23:45:11 字數 879 閱讀 8586

一棵樹,每條邊上都有邊權,現在選擇一條邊將邊權變為0,使\(m\)條路徑邊權和其中一條的最大值最小,問這個值

由於大於最終結果的一定可行,小於最終結果的一定不可行,所以二分答案,首先答案以下的需求都不需要考慮,差分,如果該位置上的需求數量等於所需求的數量那麼這條邊就可以選,但是如果最大值減去這條邊仍不能小於等於答案,那麼依然是不可行的,或者不可能達到需求數量也是不可行的

#include #include #include #include #define rr register

using namespace std;

const int n=300011;

struct nodee[n<<1];

struct recq[n];

int dep[n],fat[n],son[n],big[n],top[n],n,k=1,m,tot,ls[n],w[n],mx,dis[n];

inline signed iut()

bool cmp(const rec &a,const rec &b)

inline signed max(int a,int b)

inline void dfs1(int x,int fa)

}inline void dfs2(int x,int linp)

inline signed lca(int x,int y)

inline void dfs3(int x,int fa)

inline bool check(int now)

signed main()

return !printf("%d",l);

}

------------恢復內容結束------------

洛谷P2680 運輸計畫(樹上差分 二分)

傳送門 考慮樹上亂搞 首先這是滿足二分性質的,如果在某個時間可以完成工作那麼比他更長的時間肯定也能完成工作 然後考慮二分,設當前答案為 mid 如果有一條鏈的長度大於 mid 那麼這條鏈上必須得刪去一條邊。我們可以貪心的刪去所有可以刪去的邊中最長的,然後看看最長邊減去刪去的邊是否小於等於 mid 如...

P2680 運輸計畫 二分 LCA 樹上差分

公元20442044 年,人類進入了宇宙紀元。l 國有 nn 個星球,還有 n 1n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1n 1 條航道連通了 ll 國的所有星球。小 p 掌管一家物流公司,該公司有很多個運輸計畫,每個運輸計畫形如 有一艘物流飛船需要從 u iu i 號星球沿最快的...

P2680 運輸計畫 二分 樹上差分

又咕咕了幾天 qwq 我們先將原問題轉化為 log 2n 個判定問題 如何 ck x 把所有 x 的路徑在樹上標記 邊差分 然後找到被所有 x 路徑覆蓋的點 邊轉點,邊權下放點權 嘗試把這個點的權值改為零,檢查最長路徑的時間是否 leq x 若存在這樣的點,return true 否則 return...