题目:
A. 无向图的连通分量
Problem ID: 1056
Contest ID: 5886
必做题
Runtime Error
时间限制:1s 空间限制:64M
题目描述:
给出一个无向图,求图的连通分量的个数。保证无重边和自环。
输入格式:
第一行两个正整数 n(节点数),m(边数)。(节点编号从 1 到 n)
以下 m 行每行一个整数对描述一条边
输出格式:
一个整数表示连通分量的个数
样例输入:
8 7 1 2 2 3 3 1 4 5 4 6 4 7 4 8
样例输出:
2
数据范围:
1 ≤ n, m ≤10000
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,sum=0,ans=0;
vector<int> v[100001];
bool vis[100001]={false};
int dfs(int a){
vis[a]=true;
int res=1;
for(int i=1;i<=v[a].size();i++) {int e=v[a][i]; if(!vis[e]) res+=dfs(e);}
return res;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++) { int x,y; cin>>x>>y; v[x].push_back(y); v[y].push_back(x); }
for (int i=1;i<=n;i++) if(!vis[i]) { int res=dfs(i); sum+=res*ans; ans+=res; }
cout<<ans;
return 0;
}