bzoj4326 NOIP2015 運輸計畫

2022-05-31 04:57:18 字數 1953 閱讀 7822

description

公元2023年,人類進入了宇宙紀元。

l國有n個星球,還有n-1條雙向航道,每條航道建立在兩個星球之間,這n-1條航道連通了l國的所有星球。

小p掌管一家物流公司,該公司有很多個運輸計畫,每個運輸計畫形如:有一艘物流飛船需要從$u_i$號星球沿最快的宇航路徑飛行到$v_i$號星球去。顯然,飛船駛過一條航道是需要時間的,對於航道i,任意飛船駛過它所花費的時間為$t_i$,並且任意兩艘飛船之間不會產生任何干擾。

為了鼓勵科技創新,l國國王同意小p的物流公司參與l國的航道建設,即允許小p把某一條航道改造成蟲洞,飛船駛過蟲洞不消耗時間。在蟲洞的建設完成前小p的物流公司就預接了m個運輸計畫。在蟲洞建設完成後,這m個運輸計畫會同時開始,所有飛船一起出發。當這m個運輸計畫都完成時,小p的物流公司的階段性工作就完成了。如果小p可以自由選擇將哪一條航道改造成蟲洞,試求出小p的物流公司完成階段性工作所需要的最短時間是多少?

input

第一行包括兩個正整數n,m,表示l國中星球的數量及小p公司預接的運輸計畫的數量,星球從1到n編號。接下來n-1行描述航道的建設情況,其中第i行包含三個整數$a_i,b_i,t_i$,表示第i條雙向航道修建在$a_i$與$b_i$兩個星球之間,任意飛船駛過它所花費的時間為$t_i$。接下來m行描述運輸計畫的情況,其中第i行包含兩個正整數$u_i$和$v_i$,表示第i個運輸計畫是從$u_i$號星球飛往$v_i$號星球。

output

輸出檔案只包含乙個整數,表示小p的物流公司完成階段性工作所需要的最短時間。

sample input

6 3

1 2 3

1 6 4

3 1 7

4 3 6

3 5 5

3 6

2 5

4 5sample output

hint

$n\leq300000$

solution

這道題就是求在一條邊的時間不算的情況下,求$u_i$到$v_i$的最大值的最小值.

顯然二分答案ans,然後判斷對於所有花費時間$>ans$的$(u_i,v_i)$的交是否為空.

如果不為空,若滿足$max\-max\\leq ans$,則合法.

求路徑交是否為空=求是否存在一條邊所有路徑都經過.

$w[i]$表示$i$連向它父親的那條邊有多少條路徑經過,

每次$w[u_i]+1,w[v_i]+1,w[lca[(u_i,v_i)]-2$,向上傳遞即可.

#include#include#include#include#include#include#include#include#include#include#define k 20

#define n 300005

#define m 600005

#define inf 300000000

using namespace std;

typedef long long ll;

struct graphe[m];

struct linea[n];

int f[n][k],g[n],t[n],w[n],ef[n],dep[n],n,m,mk,sum,cnt;

bool v[n],flag;

stacks;

inline int read()

return ret;

}inline void addedge(int x,int y,int w)

inline void dfs(int u)

inline int lca(int x,int y)

else}}

}inline bool chk(int k)

}flag=false;total(1);

return flag&&ma-mk<=k;

}inline void init()

printf("%d\n",l);

}int main()

bzoj4326 NOIP2015 運輸計畫

題目 遙想當年初三參加時,想到了二分,想到了lca,就沒想到如何判斷,然後差20分省一23333.首先答案顯然滿足二分性質,之後判定答案。我們把長度超過k的路徑找到,找出它們公共邊中最長的,把它變為0,看是否可行。如何,找公共邊?樹鏈剖分當然可以,但太複雜了。可以把兩端標記加1,lca標記減2,之後...

bzoj4326 noip 2015 運輸計畫

time limit 30 sec memory limit 128 mb submit 1841 solved 1173 submit status discuss 公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航...

bzoj4326 NOIP2015 運輸計畫

題目 大佬的部落格 思路其實很簡單,就是tarjan求lca 二分答案 樹上差分 貌似不需要解釋,看到這個思路就應該基本上會寫了吧 實現起來也聽簡單的 include using namespace std const int n 300003 struct nodee n 1 q n 1 stru...