題意:題意可以轉化為:不斷給乙個圖加有邊,問每次加邊後圖的連通分圖有多少個。
解法:裸的並查集,開始時n個點各自屬於乙個連通分量。每次加邊都有可能將兩個聯通分量連起來,也有可能是在乙個聯通分量加了一條邊。主要就是判斷加邊的兩個點的根父母是否是同乙個點,若是則兩點屬於同乙個連通分量,否則就是兩個聯通分量,這時連通分量數就會減一。
**:#include #include #include #include using namespace std;
int parent[100100];
int getparent(int k)
int n,m;
struct point
points[100010];
vectorvec;
int rem[100010];
int main()
{ while(scanf("%d%d",&n,&m)==2)
{vec.clear();
for(int i=0;i<=n;i++)
parent[i]=i;
for(int i=m-1;i>=0;i--)
scanf("%d%d",&points[i].u,&points[i].v);
int ans=n;
int p=0;
for(int i=0;i=0;i--)
cout<
BFS 連通分量 求連通分量
題目描述 求乙個圖的連通分量 input n 頂點數 100 邊 以0 0作為結束標誌 output 連通分量 強連通圖的連通分量為其本身。如果為非連通圖,則連通分量為該圖的最大連通子圖。分析 建乙個100 100的布林矩陣,b x,y true表示x與y連通。同時還要記錄該點是否被遍歷過 然後遍歷...
求連通分量
求連通分量 time limit 1000ms memory limit 65536k total submit 233 accepted 132 description 求乙個圖的連通分量 input n 頂點數 100 邊 output 連通分量 sample input 5 1 2 3 4 2...
強連通分量 tarjan求強連通分量
雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...