#P15605. [2026年保加利亚国家队组队赛Senior]Charging充电
[2026年保加利亚国家队组队赛Senior]Charging充电
题目描述
在奥林匹亚国,一家电动汽车公司刚刚成立。公司总裁 Monopoly 先生希望尽快说服奥林匹亚居民选择电动汽车,因此准备展开一次大规模广告宣传。他打算在全国各地的广告牌上写下如下声明:
无论你从哪里出发、要去往哪里,总能选择一条简单路线,并且这条路线会经过至少一个电动汽车充电站。
当然,Monopoly 先生并不打算建设比必要数量更多的充电站。正因如此,广告语刻意没有说明这条路线必须有多短。也就是说,即使经过充电站需要绕很远的路,广告声明仍然成立。这样的绕路甚至符合公司的利益:电动车行驶的路程越多,就越经常需要充电,每次充电都会带来额外利润。
Monopoly 先生还指望很少有人会认真考虑起点和终点相同的情况;对于这种情况,公司不承诺广告条件一定成立。
奥林匹亚的道路网络由 $$N$$ 个城镇组成,编号为 $$0$$ 到 $$N-1$$,以及 $$M$$ 条双向道路组成。可能存在形如 $$(i,i)$$ 的自环道路,也可能存在连接同一对不同城镇的多条不同道路。保证从任意城镇都可以通过道路网络到达任意其他城镇。
一条路线是一个城镇序列,其中任意相邻两个城镇之间都有道路相连。如果一条路线中没有任何城镇被访问超过一次,则称这条路线为简单路线。
Monopoly 先生想选择若干城镇建设充电站,使得对于每一对不同的城镇,都存在一条连接它们的简单路线,并且这条路线经过至少一个建有充电站的城镇。
请你帮助 Monopoly 先生,找出满足条件的最小规模城镇集合。
输入格式
第一行两个整数:
表示城镇数量和道路数量。
接下来 $$M$$ 行,每行两个整数 $$u,v$$,表示一条连接城镇 $$u$$ 和城镇 $$v$$ 的双向道路。
输出格式
第一行输出一个整数 $$k$$,表示选择建设充电站的城镇数量。你必须保证 $$k$$ 最小。
接下来输出 $$k$$ 个整数,表示选择的城镇编号。它们可以在同一行或多行输出,顺序任意。
如果存在多个最优解,可以输出任意一个。
样例
输入
6 6
0 1
1 2
2 3
3 0
3 4
4 5
输出
2
2 4
样例图
原题样例图如下,黑圈表示选择建设充电站的城镇。

样例解释
如果使用 $$2$$ 个充电站,可以选择将它们建在城镇 $$2$$ 和 $$4$$。这是一个合法方案,因为在城镇 $$0,1,3,5$$ 中的任意两个城镇之间,都存在一条经过至少一个充电站的简单路线。
注意,使用单个充电站是不可能满足条件的。
数据范围
对于所有测试数据,满足:
保证道路网络连通。
子任务
| 子任务 | 分值 | 依赖子任务 | $$N$$ | $$M$$ | 其他限制 |
|---|---|---|---|---|---|
| 0 | - | - | 题面样例 | ||
| 1 | 9 | $$\le 10$$ | $$\le 15$$ | - | |
| 2 | 14 | $$\le 3\times 10^5$$ | - | $$M=N-1$$ | |
| 3 | 12 | 0 | $$M=N$$ | ||
| 4 | 7 | - | $$\le 3000$$ | $$\le 15000$$ | 可以用一个充电站满足条件 |
| 5 | 9 | 4 | $$\le 3\times 10^5$$ | $$\le 1.5\times 10^6$$ | |
| 6 | 24 | 0,2,3 | 道路网络形成仙人掌图 | ||
| 7 | 25 | 0—6 | - | ||
只有通过某个子任务的所有测试,以及它所依赖的全部子任务,才能获得该子任务的分数。
仙人掌图指:一个无自环、无重边的连通无向图,其中每条边至多属于一个简单环;但一个顶点可以属于多个简单环。
说明
原题是函数实现题,要求实现 chooseStations。本版本已改为标准输入输出形式:直接读入图,输出一个最小充电站集合。
由于最优解可能不唯一,本题使用特殊评测。评测程序会检查:
- 输出的充电站数量是否等于标准答案数量;
- 输出点编号是否合法且没有重复;
- 输出集合是否真的满足题目要求。