日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P1111 修复公路(并查集)

發布時間:2024/9/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1111 修复公路(并查集) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.luogu.org/problem/P1111
題目背景
AA地區在地震過后,連接所有村莊的公路都造成了損壞而無法通車。政府派人修復這些公路。

題目描述
給出A地區的村莊數NN,和公路數MM,公路是雙向的。并告訴你每條公路的連著哪兩個村莊,并告訴你什么時候能修完這條公路。問最早什么時候任意兩個村莊能夠通車,即最早什么時候任意兩條村莊都存在至少一條修復完成的道路(可以由多條公路連成一條道路)

輸入格式
第1行兩個正整數N,M

下面MM行,每行33個正整數x, y, tx,y,t,告訴你這條公路連著x,yx,y兩個村莊,在時間t時能修復完成這條公路。

輸出格式
如果全部公路修復完畢仍然存在兩個村莊無法通車,則輸出-1?1,否則輸出最早什么時候任意兩個村莊能夠通車。

輸入輸出樣例
輸入 #1 復制

4 4 1 2 6 1 3 4 1 4 5 4 2 3

輸出 #1 復制

5

說明/提示
N≤1000,M≤100000

x≤N,y≤N,t≤100000
/*
先根據時間先后排個序。
用cnt記錄一家人的個數,如果人數到n,那就可以輸出答案了
此時的cnt計數部分,

if(cnt[fx] < cnt[fy]) //兒孫多的當祖先{pre[fx] = pre[fy];//說明一下,此時,只是fx這個集合的老大指向了fy集合的根,下面也同理cnt[fy] += cnt[fx];}else{pre[fy] = pre[fx];cnt[fx] += cnt[fy];``` 并不一定能讓原本兩個集合的人都指向同一個根, (之前我這里的pre合并有誤區,后來訓練賽上, 因為這題我pre合并有誤區 我用了相同方法, 但是此時正是要用到pre的每個值,誤區使我WA,現在明白了,這題也記錄一下) */```c #include <iostream> #include <string.h> #include <algorithm> using namespace std; const int MAXN = 1e5 + 5; struct Edge {int u,v;int t;bool operator <(const Edge &x)const{return t < x.t;} } a[MAXN]; int pre[MAXN]; int cnt[MAXN]; int n,m; int myFind(int x) {if(pre[x] == x){return x;}return pre[x] = myFind(pre[x]); } int myMerge(int pos) {int fx = myFind(a[pos].u);int fy = myFind(a[pos].v);if(fx != fy){if(cnt[fx] < cnt[fy]) //兒孫多的當祖先{pre[fx] = pre[fy];//說明一下,此時,只是fx這個集合的老大指向了fy集合的根,下面也同理cnt[fy] += cnt[fx];}else{pre[fy] = pre[fx];cnt[fx] += cnt[fy];}if(cnt[fx] == n || cnt[fy] == n){return 1;}}return 0; } int main() {cin>>n>>m;for(int i = 1; i <= n; i++){pre[i] = i;cnt[i] = 1;}for(int i = 0; i < m; i++){cin>>a[i].u>>a[i].v>>a[i].t;}sort(a,a+m);int flag = 0;for(int i = 0; i < m; i++){if(myMerge(i)){cout<<a[i].t<<endl;flag = 1;break;}}if(!flag) cout<<"-1"<<endl;return 0; }

總結

以上是生活随笔為你收集整理的P1111 修复公路(并查集)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。