NOIP2015 運輸計畫 線段樹or差分二分

2022-02-28 15:36:35 字數 1022 閱讀 2446

目錄luogu

好久沒寫部落格了,水一篇波。

列舉最長鏈的邊,刪除後代價為(最長鏈-邊權,不經過這條邊的鏈)的最大值。

不經過某條邊的最大值要用線段樹維護補集。

複雜度\(o(nlog^2n)\)

二分答案,刪除的邊為\(>mid\)的鏈的交集。

用樹上查分維護交集。

最後在交集中找個最大的邊刪除就好了。

複雜度\(o(nlogn)\)

思路2,複雜度小,好寫,簡單,細節少。

思路1,複雜度高,碼量大,細節多,並不是呢麼好想。

所以並不是很建議寫第一種。

但他靠著樹剖的小常數跑過了樹上差分(至少我是這樣,1.9s->1.2s)。

#include using namespace std;

const int _=5e5+7;

int read()

int n,m,ans,u[_],v[_],dsr[_],w[_];

struct node e[_<<1];

int head[_],tot;

void add(int u,int v,int q)

int f[_],dep[_],siz[_],son[_],top[_],idx[_],dis[_],nb[_],cnt;

void dfs1(int u,int fa)

void dfs(int l,int r,int rt)

}int lca(int x,int y)

int n,m,ans,u[_],v[_],lca[_],len[_],the_biggest,w[_];

struct node e[_<<1];

int head[_],tot;

void add(int u,int v,int q)

int f[_],dep[_],siz[_],son[_],dis[_],top[_],cnt;

void dfs1(int u,int fa) cout

}

noip2015 運輸計畫

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

NOIP2015 運輸計畫

題目鏈結 codevs 4632 題目大意 在一棵 n 節點樹上,有 m個運輸計畫 從ai 到 bi n,m 300000 問 把哪一條樹邊的權值變為0,可以使所有運輸計畫的最大距離最小,輸出這個最大距離的最小值。分析 0.首先要會lca和樹上差分。1.顯然,這道題要求樹上兩點之間的距離,所以要寫l...

noip 2015 運輸計畫

去題面的傳送門 題目的意思是 求將一棵樹上的任意一條邊權賦值為0時,所有航線的最長長度的最小值 想到二分答案 如何驗證?既然我們二分的答案是最長路線,也就是說,在將一條邊權賦值為0之後,所有的路線長度應該都小於等於mid。但是只能刪掉一條邊,所以這條邊是所有刪邊之前長度小於mid的路線的交邊。問題轉...