a 地區在**過後,連線所有村莊的公路都造成了損壞而無法通車。**派人修復這些公路。
給出a地區的村莊數 n ,和公路數 m ,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠通車,即最早什麼時候任意兩條村莊都存在至少一條修復完成的道路(可以由多條公路連成一條道路)
輸入格式:
第 1 行兩個正整數 n,m
下面 m 行,每行 3 個正整數 x, y, t,告訴你這條公路連著 x,y兩個村莊,在時間t時能修復完成這條公路。
輸出格式:
如果全部公路修復完畢仍然存在兩個村莊無法通車,則輸出 -1,否則輸出最早什麼時候任意兩個村莊能夠通車。
輸入樣例#1: 複製
4 4輸出樣例#1: 複製1 2 6
1 3 4
1 4 5
4 2 3
5100000n≤1000,m≤100000
100000x≤n,y≤n,t≤100000
emm,並查集。。
除了這一塊兒都是模板。。
認真讀好題,
要求任意兩個點都能相互到達,
而且一條路徑可以由多條路徑組成,
而且路徑可以同時修建,
這就是取max的原因
根據樣例,我們可以修建的路如上圖,
怎樣最優呢?
使任意兩個點都能相互到達而且max最小。
(別誤會啊,可不是二分。。)
那看圖就能看出來,去掉1到2的那條路徑就可以了。
答案就是這樣的:
因為路是雙向的,所以任意兩個點可以相互到達,
而且max=5是所有可行答案中最小的。
下面就是**實現過程了:
1 #include2 #include3 #include4 #include5 #include6如果你不開心,那我就把右邊這個帥傻子分享給你吧,using
namespace
std;78
intn,m,ans,t; //模板
9int fa[200002
];10
11struct
nodea[100002
];14
15int find(int
x) //模板
1620
21bool
cmp(node x,node y) //模板
2225
26int
main()
2748}49
}50 printf("-1"
);51
return0;
52 }
你看,他這麼好看,那麼深情的望著你,你還傷心嗎?
真的!這**盯上他五秒鐘就想笑了。
一切都會過去的。
P1111 修復公路
a地區在 過後,連線所有村莊的公路都造成了損壞而無法通車。派人修復這些公路。給出a地區的村莊數n,和公路數m,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠通車,即最早什麼時候任意兩條村莊都存在至少一條修復完成的道路 可以由多條公路連成...
P1111 修復公路
題目提供者該使用者不存在 標籤並查集 難度普及 提高 提交該題 討論 題解記錄 a地區在 過後,連線所有村莊的公路都造成了損壞而無法通車。派人修復這些公路。給出a地區的村莊數n,和公路數m,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠...
P1111 修復公路
aa地區在 過後,連線所有村莊的公路都造成了損壞而無法通車。派人修復這些公路。給出a地區的村莊數nn,和公路數mm,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠通車,即最早什麼時候任意兩條村莊都存在至少一條修復完成的道路 可以由多條公...