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