#L4281. 「KTSC 2021 R1」通信网络
「KTSC 2021 R1」通信网络
注意事项
在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:
- C++(标准为 C++ 17 及以上)
请在提交源代码前添加 #include "communication.h"。
题目描述
题目译自 2021년도 국제정보올림피아드 대표학생 선발고사 - 1차 선발고사 T2 「통신망」
通信网络由 台计算机和 条线路组成。计算机编号从 到 。每条线路可以让两台不同的计算机进行双向通信。如果任意两台计算机可以通过一条或多条线路进行通信,则称通信网络是连通的。如果存在无法通信的计算机对,则称通信网络是断开的。
一条线路 的风险度定义如下:
- 对于通信网络中的每台计算机 ,如果移除计算机 后剩余的网络是断开的,则称计算机 是危险的。
- 初始通信网络中移除线路 后,危险计算机的数量即为线路 的风险度。
请编写一个程序,计算每条线路的风险度。
实现细节
你需要实现以下函数:
vector<int> find_num_critical(int N, vector<pair<int, int>> E);
- 该函数只会被调用一次。
- 参数 表示计算机的数量。
- 参数 是一个大小为 的数组,数组中的每个元素表示一条线路,由一对不同的计算机编号组成。
- 该函数返回一个长度为 的整数数组,表示每条线路的风险度。数组中每个风险度对应的线路顺序与输入的 相同。
注意,提交的代码中不应包含任何输入输出操作。
样例
考虑 和线路 的情况。评测程序将调用如下函数:
find_num_critical(5, [[1,5],[5,2],[2,3],[2,4],[2,5]]);
初始通信网络如下图所示:

例如,移除连接 号和 号计算机的线路后,通信网络如下图所示:

在这个网络中,、、、 号计算机是危险的。注意, 号计算机移除后剩余网络仍然连通,因此不是危险的。
移除连接 号和 号计算机的其中一条线路后,通信网络如下图所示:

在这个网络中, 号和 号计算机是危险的。
find_num_critical 函数应返回数组 。
这个样例满足所有子任务的条件。
数据范围与提示
对于所有输入数据,满足:
- 每条线路连接两台不同的计算机
- 可能存在多条线路连接同一对计算机
- 初始通信网络是连通的
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 1 | 5 | ; |
| 2 | 11 | ; |
| 3 | 7 | |
| 4 | 13 | 对于 台不同的计算机 和 条不同的线路 ,如果线路 连接计算机 和 ,线路 连接计算机 和 ,则 条线路 形成一个环。两个环相同意味着组成环的线路集合相同; 对于通信网络中的每条线路 ,包含线路 的环最多存在一个 |
| 5 | 25 | ; |
| 6 | 29 | ; |
| 7 | 10 | 无附加限制 |
示例评测程序
示例评测程序的输入格式如下:
- 第 行:
- 第 行: ,表示 号和 号计算机通过线路连接
示例评测程序的输出格式如下:
- 第 行:
find_num_critical函数返回的数组
示例评测程序可能与实际评测程序不同。