专栏文章

题解:AT_abc404_c [ABC404C] Cycle Graph?

AT_abc404_c题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mipde7up
此快照首次捕获于
2025/12/03 10:10
3 个月前
此快照最后确认于
2025/12/03 10:10
3 个月前
查看原文

题目大意

NN 个点与 MM 条边,让你求它是不是有且仅有一个的循环图。

思路

  • 首先判断图是否联通,如果不连通就不符合题意,无解。
  • 其次考虑 nn 个点是不是组成了一个环,我们只需要判断每个点的度数是否都为 22,因为如果一个点的度数为 11,肯定不在环里,度数大于 22,则一定不能只组成一个环。

Code

CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;

int du[N];

int f[N];
int find(int x){
    if(f[x]==x)return x;
    return f[x]=find(f[x]);
}
/*
	1. 判断给定图,是否联通  dfs  并查集
	2. 判断每个点的度数是不是2

*/
int main(){
	int n, m;
	cin >> n >> m;
	for(int i = 1; i <= n; i++) f[i] = i;
	for(int i = 1; i <= m; i++){
		int u, v;
		cin >> u >> v;
		int fu = find(u), fv = find(v);
		f[fu] = fv;
		du[u]++;
		du[v]++;
	}
	for(int i = 1; i <= n; i++){
		if(find(i) != find(1) || du[i] != 2){
			cout << "No" << endl;
			return 0;
		}
	}
	cout << "Yes" << endl;
    return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...