bb地區在**過後,所有村莊都造成了一定的損毀,而這場**卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。
給出bb地區的村莊數nn,村莊編號從00到n-1n−1,和所有mm條公路的長度,公路是雙向的。並給出第ii個村莊重建完成的時間t_iti,你可以認為是同時開始重建並在第t_iti天重建完成,並且在當天即可通車。若t_iti為00則說明**未對此地區造成損壞,一開始就可以通車。之後有qq個詢問(x, y, t)(x,y,t),對於每個詢問你要回答在第tt天,從村莊xx到村莊y的最短路徑長度為多少。如果無法找到從xx村莊到yy村莊的路徑,經過若干個已重建完成的村莊,或者村莊xx或村莊yy在第t天仍未重建完成 ,則需要返回-1−1。
第一行包含兩個正整數n,mn,m,表示了村莊的數目與公路的數量。
第二行包含nn個非負整數t_0, t_1,…, t_t0,t1,…,tn−1,表示了每個村莊重建完成的時間,資料保證了t_0 ≤ t_1 ≤ … ≤ t_t0≤t1≤…≤tn−1。
接下來mm行,每行33個非負整數i, j, wi,j,w,ww為不超過1000010000的正整數,表示了有一條連線村莊ii與村莊jj的道路,長度為ww,保證i≠ji≠j,且對於任意一對村莊只會存在一條道路。
接下來一行也就是m+3m+3行包含乙個正整數qq,表示qq個詢問。
接下來qq行,每行33個非負整數x, y, tx,y,t,詢問在第tt天,從村莊xx到村莊yy的最短路徑長度為多少,資料保證了tt是不下降的。
共qq行,對每乙個詢問(x, y, t)(x,y,t)輸出對應的答案,即在第tt天,從村莊xx到村莊yy的最短路徑長度為多少。如果在第t天無法找到從xx村莊到yy村莊的路徑,經過若干個已重建完成的村莊,或者村莊x或村莊yy在第tt天仍未修復完成,則輸出-1−1。
輸入 #1複製
4 5輸出 #1複製1 2 3 4
0 2 1
2 3 1
3 1 2
2 1 4
0 3 5
42 0 2
0 1 2
0 1 3
0 1 4
-1-15對於30\%30%的資料,有n≤50n≤50;4
對於30\%30%的資料,有t_i= 0ti=0,其中有20\%20%的資料有t_i = 0ti=0且n>50n>50;
對於50\%50%的資料,有q≤100q≤100;
對於100\%100%的資料,有n≤200n≤200,m≤n \times (n-1)/2m≤n×(n−1)/2,q≤50000q≤50000,所有輸入資料涉及整數均不超過100000100000。
題解:不斷合併最小的邊,這樣就最近的就會變大
//luogu-judger-enable-o2
#include#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
double
db;const
int n=1005
;struct
nodee[
1002019
];int
n,m,x[n],y[n],cp,fa[n];
db a[n];
int find(int
x) db how_long(
int uu,int
vv)void add_ycll(int aa,int
bb)bool
cmp(node aa,node bb)
intmain()
} //printf("%.2lf",a[n-m+1]);
return0;
}
洛谷 P4047 JSOI2010 部落劃分
這道題其實就是無線通訊網的雙倍經驗啦,只是在輸出的時候不同罷了。還是一樣的 kruskal 演算法,但是在求的時候,應該在 now n k 1 的時候結束。本來到 n k 就行了的,但是由於 n k 1 這條邊是在應該部落裡面的,不能算,所以要找到第乙個不在乙個部落裡面的邊。include usin...
P4047 JSOI2010 部落劃分
聰聰研究發現,荒島野人總是過著群居的生活,但是,並不是整個荒島上的所有野人都屬於同乙個部落,野人們總是拉幫結派形成屬於自己的部落,不同的部落之間則經常發生爭鬥。只是,這一切都成為謎團了 聰聰根本就不知道部落究竟是如何分布的。不過好訊息是,聰聰得到了乙份荒島的地圖。地圖上標註了n個野人居住的地點 可以...
P4047 JSOI2010 部落劃分題解
題意 給定一些點,要把這些點分為k個部落,問最近兩個部落間的最遠距離是多少。解法 二分答案 並查集檢測鴨!二分的時候要注意精度問題噢,eps開到1e 3會有乙個點過不去。開始看錯題意想半天。include include include include include include include...