题目描述
该题的目的是要你统计图的连通分支数。
输入描述:
每个输入文件包含若干行,每行两个整数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;
}