题目描述
该题的目的是要你统计图的连通分支数。
输入
每个输入文件包含若干行,每行两个整数i,j,表示节点i和j之间存在一条边。
输出
输出每个图的联通分支数。
样例输入
1 4 4 3 5 5
样例输出
2
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000010;
vector<int> adj[maxn];
bool vis[maxn]={false};
void DFS(int u){
vis[u]=false;
for(int i=0;i<adj[u].size();i++){
int v=adj[u][i];
if(vis[v]){
DFS(v);
}
}
}
void DFSTrave(int n){
int ans=0;
for(int i=1; i<=n;i++){
if(vis[i]){
DFS(i);
ans++;
}
}
printf("%d\n",ans);
}
int main(){
int a,b,n=0,x;
while(cin>>a>>b){
x=(a>b)?a:b;
n=(n>x)?n:x;
adj[a].push_back(b);
adj[b].push_back(a);
vis[a]=vis[b]=true;
}
DFSTrave(n);
return 0;
}