求救!RE 0

题目:

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;
}
3 个赞

求的是连通块的数量

3 个赞

核心代码

void dfs(int u){
	for(int i = 0; i < g[u].size(); i++){
		if(!vis[g[u][i]]){
			vis[g[u][i]] = 1;
			dfs(g[u][i]);
		}
	}
}
3 个赞

感恩

2 个赞

连通分量直接并查集啊

此外 vector 默认下标 0 开始,RE 你后来访问到了 size 但是并没有这个下标,应该是这个问题

2 个赞