題目描述
該題的目的是要你統計圖的連通分支數。
輸入描述:
每個輸入文件包含若干行,每行兩個整數i,j,表示節點i和j之間存在一條邊。
輸出描述:
輸出每個圖的聯通分支數。
輸入
1 4
4 3
5 5
輸出
2
版本1
深搜,還可以用並查集做
#include<bits/stdc++.h>
using namespace std;
const int maxn=500001;
int vis[maxn];
vector<int> G[maxn];
void dfs(int r){
vis[r]=1;
for(int i=0;i<G[r].size();i++){
int v = G[r][i];
if(vis[v]) continue;
dfs(v);
}
}
int main(){
int u,v;
fill(vis,vis+maxn,1);
while(cin>>u>>v){
G[u].push_back(v);
G[v].push_back(u);
vis[u]=vis[v]=0;
}
int cnt=0;
for(int i=0;i<maxn;i++){
if(vis[i]==0){
dfs(i);
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}