luogu整理 P1111 修復公路

2022-05-05 16:33:08 字數 1125 閱讀 5170

大體題意:給定n個點,一條一條邊加到圖裡面,然後判斷什麼時候成為乙個連通圖。我一開始的時候是每增加一條邊就重新掃一掃這個圖,但是時間複雜度很顯然不夠用,所以我第一遍就炸了。後來我發現實際上每次加入一條邊的時候,判斷會不會減少乙個連通塊就可以。

並查集容易出現的bug:每次合併的時候,**應該寫成這樣:

fa[getfa(x)] = getfa(y); 或者

fa[getfa(x)] = y;

因為x的fa可能會鏈結這其他的點,如果直接更改x的fa,課能會導致他原有的父親「丟失」。

注釋裡面的是我第一遍的檔案。

#include #include #include using namespace std;

struct edgeedge[100009];

bool cmp(edge a,edge b)

int fa[100009];

int getfa(int x)

int n,m;

int main()

n--;

sort(edge+1,edge+1+m,cmp);

for(int i = 1;i <= n; i++)

//cout << endl;

// for(int i = 1;i <= m; i++)

// int i = 0;

// while(i <= m)

// x = edge[i].x,y = edge[i].y;

// fa[getfa(x)] = getfa(y);

// bool fd = 0;

// for(int j = 1;j <= n; j++)

// //cout << endl;

// for(int j = 1;j <= n; j++)

// if(!fd)

// }

for(int i = 1;i <= m; i++)

// cout << x << ':' << y << endl;

if(n <= 0)

}cout << -1 << endl;

return 0;

}

P1111 修復公路

a地區在 過後,連線所有村莊的公路都造成了損壞而無法通車。派人修復這些公路。給出a地區的村莊數n,和公路數m,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠通車,即最早什麼時候任意兩條村莊都存在至少一條修復完成的道路 可以由多條公路連成...

P1111 修復公路

a 地區在 過後,連線所有村莊的公路都造成了損壞而無法通車。派人修復這些公路。給出a地區的村莊數 n 和公路數 m 公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠通車,即最早什麼時候任意兩條村莊都存在至少一條修復完成的道路 可以由多條公...

P1111 修復公路

題目提供者該使用者不存在 標籤並查集 難度普及 提高 提交該題 討論 題解記錄 a地區在 過後,連線所有村莊的公路都造成了損壞而無法通車。派人修復這些公路。給出a地區的村莊數n,和公路數m,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠...