题解 | 图的分类

图的分类

https://www.nowcoder.com/practice/e2ded1a877d6477a9d37c6d1765c5377

#include <iostream> 
#include <vector>
#include <cstring>

using namespace std;

int main () {
	int n, m;
	int degree[100005];
	memset(degree, 0, sizeof(degree));
	cin >> n >> m;
	int v1, v2, max_degree = -1;
	int i = m;
	while (i--) {
		cin >> v1 >> v2;
		degree[v1]++;
		degree[v2]++;
	}
	//统计degree = 1, degree = 2, degree > 2的点的个数 
	string ans = "unknown";
	int d_1 = 0, d_2 = 0, d_gt3 = 0, d_max = -1; 
	for (int i = 1; i < n + 1; i++) {
		if (degree[i] == 1) d_1++;
		else if (degree[i] == 2) d_2++;
		else {
			d_gt3++;
			d_max = max(d_max, degree[i]);
		}
	}
	if (m == n && d_2 == n) ans = "ring";
	else if (m == n - 1 && d_2 == n - 2 && d_1 == 2) ans = "line";
	else if (m == n - 1 && d_gt3 == 1 && d_1 == d_max) ans = "star";
	cout << ans << endl;
}

全部评论

相关推荐

11-03 18:50
门头沟学院 Java
迷茫的大四🐶:问就是马上到,一周五天,6个月以上,全国可飞
点赞 评论 收藏
分享
12-13 12:11
复旦大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务