CF292B Network Topology

题目大意

给定一张图,判断其是否为一条链(例如二叉搜索树的最劣情况)、一个环、菊花图(SPFA 算法最怕的图)。

分析

观察三种图的点与边的关系,可以发现以下结论:

  • 对于一条连,只有两个点是连着一条边的,其余的点都是连着两条边的。
  • 对于环,所有的点都连着两条边。
  • 对于菊花图,只有一个点连着 n1n - 1 个边,其余的点都连着一条边。

于是想到使用桶记录每个点连的边数,再 O(1)O(1) 判断。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<bits/stdc++.h>
using namespace std;
int n, m;
int cnt[100000 + 10], edge[100000 + 10];
int main() {
cin >> n >> m;
for (int i = -m + 1, tmp; i <= m; ++i) {
cin >> tmp;
edge[tmp]++;
}
for (int i = 1; i <= n; ++i) cnt[edge[i]]++;
if (cnt[2] == n - 2 && cnt[1] == 2) cout << "bus topology" << endl;
else if (cnt[2] == n) cout << "ring topology" << endl;
else if (cnt[n - 1] == 1 && cnt[1] == n - 1) cout << "star topology" << endl;
else cout << "unknown topology" << endl;
return 0;
}

CF292B Network Topology
https://www.lzj-blog.top/2024/06/28/CF292B Network Topology/
作者
lzj
发布于
2024年6月28日
许可协议