#P11976. [KTSC 2021] 通信网络 / communication
[KTSC 2021] 通信网络 / communication
题目背景
本题翻译自 2021년도 국제정보올림피아드 대표학생 선발고사 1차 선발고사 #2 통신망。
提交时,请在程序开头添加如下内容,并且无需引用 communication.h
:
#include <vector>
#include <utility>
std::vector<int> find_num_critical(int N, std::vector< std::pair<int, int> > E);
警告:滥用本题评测一次即可封号。
题目描述
通信网络由 台计算机和 条线路组成。计算机编号为 到 。每条线路连接两台不同的计算机,使得它们之间支持双向通信。如果网络中任意两台计算机都可以通过一条或多条线路通信,则称网络是连通的;否则称网络是断开的。
对于网络中的一条线路 ,其危险度定义如下:
- 对于每台计算机 ,如果移除 后剩余网络断开,则称 为危险计算机。
- 初始网络中移除线路 后,危险计算机的数量即为 的危险度。
请编写一个程序,计算每条线路的危险度。
实现细节
你需要实现以下函数:
vector<int> find_num_critical(int N, vector< pair<int, int> > E)
- 该函数仅被调用一次。
- 参数 表示计算机的数量。
- 参数 是一个大小为 的数组,每个元素表示一条线路,由两个不同的计算机编号组成。
- 返回一个长度为 的整数数组,表示每条线路的危险度,顺序与 一致。
在提交的源代码的任何位置均不得调用标准输入输出操作。
输入格式
示例评测程序的输入格式如下:
- 第 行:
- 第 行():
表示 号计算机与 号计算机通过线路连接()。
输出格式
示例评测程序的输出格式如下:
- 第 行:函数
find_num_critical
返回的数组
请注意,示例评测程序可能与实际评测程序有所不同。
5 5
1 5
5 2
2 3
2 4
2 5
[4, 2, 4, 4, 2]
提示
约束条件
- 每条线路连接两台不同的计算机。
- 可能存在多条线路连接同一对计算机。
- 初始网络是连通的。
子任务
- ( 分)
- ( 分)
- ( 分)
- ( 分)
- 对于满足 的互不相同的计算机 和 条互不相同的通信线路 ,若线路 连接计算机 和 (其中 ),且线路 连接计算机 和 ,则称这 条线路 构成一个环(cycle)。两个环相同当且仅当它们所包含的线路集合完全一致。
- 在通信网络中,对于任意线路 ,包含 的环最多存在一个。
- ( 分)
- ( 分)
- ( 分)
- 无额外约束。
评分标准
只有 find_num_critical
函数返回的序列长度等于 ,且返回序列的所有元素与标准答案序列完全一致时,该组测试数据才会被判定为正确。
示例
-
当 且线路集合 时,评分系统将调用函数:
find_num_critical(5, [ [1,5], [5,2], [2,3], [2,4], [2,5] ])
初始通信网络结构如下:
例如,当移除连接计算机 和 之间的线路后,网络变为:
此时危险计算机是 号。需注意 号计算机被移除时剩余网络仍保持连通,因此不属于危险计算机。
当移除任意一条连接计算机 和 的线路后,网络变为:
此时危险计算机是 号和 号。
find_num_critical
函数应返回序列 。此示例满足所有子任务的约束。