BZ4326 運輸計畫

2022-05-10 03:11:21 字數 2095 閱讀 1735

time limit: 30 sec memory limit: 128 mb

submit: 2132 solved: 1372

公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n?1 條雙向航道,每條航道建立在兩個星球之間,

這 n-1 條航道連通了 l 國的所有星球。小 p 掌管一家物流公司, 該公司有很多個運輸計畫,每個運輸計畫形如

:有一艘物流飛船需要從 ui 號星球沿最快的宇航路徑飛行到 vi 號星球去。顯然,飛船駛過一條航道是需要時間

的,對於航道 j,任意飛船駛過它所花費的時間為 tj,並且任意兩艘飛船之間不會產生任何干擾。為了鼓勵科技

創新, l 國國王同意小 p 的物流公司參與 l 國的航道建設,即允許小p 把某一條航道改造成蟲洞,飛船駛過蟲

洞不消耗時間。在蟲洞的建設完成前小 p 的物流公司就預接了 m 個運輸計畫。在蟲洞建設完成後,這 m 個運輸

計畫會同時開始,所有飛船一起出發。當這 m 個運輸計畫都完成時,小 p 的物流公司的階段性工作就完成了。如

果小 p 可以自由選擇將哪一條航道改造成蟲洞, 試求出小 p 的物流公司完成階段性工作所需要的最短時間是多

少?第一行包括兩個正整數 n,m,表示 l 國中星球的數量及小 p 公司預接的運輸計畫的數量,星球從 1 到 n 編號。

接下來 n-1 行描述航道的建設情況,其中第 i 行包含三個整數 ai,bi 和 ti,

表示第 i 條雙向航道修建在 ai 與 bi 兩個星球之間,任意飛船駛過它所花費的時間為 ti。

接下來 m 行描述運輸計畫的情況,其中第 j 行包含兩個正整數 uj 和 vj,表示第 j 個運輸計畫是從 uj 號星球飛往 vj號星球。

資料保證 1≤ui,vi≤n ,n,m<=300000

資料保證 1≤ai,bi≤n 且 0≤ti≤1000。

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

6 31 2 3

1 6 4

3 1 7

4 3 6

3 5 5

3 62 5

4 511

將第 1 條航道改造成蟲洞: 則三個計畫耗時分別為:11,12,11,故需要花費的時間為 12。

將第 2 條航道改造成蟲洞: 則三個計畫耗時分別為:7,15,11,故需要花費的時間為 15。

將第 3 條航道改造成蟲洞: 則三個計畫耗時分別為:4,8,11,故需要花費的時間為 11。

將第 4 條航道改造成蟲洞: 則三個計畫耗時分別為:11,15,5,故需要花費的時間為 15。

將第 5 條航道改造成蟲洞: 則三個計畫耗時分別為:11,10,6,故需要花費的時間為 11。

故將第 3 條或第 5 條航道改造成蟲洞均可使得完成階段性工作的耗時最短,需要花費的時間為 11。

階段性工作所需要的最短時間想到二分

對於個大於mid的路程顯然都需要經過蟲洞不然就超時了

樹上差分找出被每乙個路程覆蓋的邊中的最大值,和最遠路程與mid的差比較即可

#include#include#include#include#define m 1000000

using namespace std;

int i,m,n,j,k,x,y,z,ver[m],nex[m],edge[m],head[m],top[m],d[m],f[m],cnt,wson[m],c[m],maxx,tmp,w,size[m],g[m],cs[m];

struct vv

a[m];

void add(int x,int y,int z)

void dfs1(int now,int fa) }

void dfs2(int now,int ttop)

}void dfs3(int now,int fa)

}bool dfs4(int now,int fa,int ss)

return 0;

}int lca(int x,int y)

bool check(int x)

return dfs4(1,0,a[1].z-x);

}int main()

printf("%d",tmp);

}

Bzoj4326 運輸計畫

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

bzoj 4326運輸計畫

二分 樹上倍增 先放乙個用倍增法求解樹上距離的方法,我最開始又犯了那個錯誤 這段我最開始上下又寫反了。記性他就是不進腦子啊。再錯我tm是dog include using namespace std typedef long long ll typedef int lint typedef pair...

bzoj4326 NOIP2015 運輸計畫

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