#P15605. [2026年保加利亚国家队组队赛Senior]Charging充电

    ID: 14817 传统题 2000ms 1024MiB 尝试: 6 已通过: 1 难度: 8 上传者: 标签>图论搜索DFS算法基础贪心CF2500树形DP

[2026年保加利亚国家队组队赛Senior]Charging充电

题目描述

在奥林匹亚国,一家电动汽车公司刚刚成立。公司总裁 Monopoly 先生希望尽快说服奥林匹亚居民选择电动汽车,因此准备展开一次大规模广告宣传。他打算在全国各地的广告牌上写下如下声明:

无论你从哪里出发、要去往哪里,总能选择一条简单路线,并且这条路线会经过至少一个电动汽车充电站。

当然,Monopoly 先生并不打算建设比必要数量更多的充电站。正因如此,广告语刻意没有说明这条路线必须有多短。也就是说,即使经过充电站需要绕很远的路,广告声明仍然成立。这样的绕路甚至符合公司的利益:电动车行驶的路程越多,就越经常需要充电,每次充电都会带来额外利润。

Monopoly 先生还指望很少有人会认真考虑起点和终点相同的情况;对于这种情况,公司不承诺广告条件一定成立。

奥林匹亚的道路网络由 $$N$$ 个城镇组成,编号为 $$0$$ 到 $$N-1$$,以及 $$M$$ 条双向道路组成。可能存在形如 $$(i,i)$$ 的自环道路,也可能存在连接同一对不同城镇的多条不同道路。保证从任意城镇都可以通过道路网络到达任意其他城镇。

一条路线是一个城镇序列,其中任意相邻两个城镇之间都有道路相连。如果一条路线中没有任何城镇被访问超过一次,则称这条路线为简单路线。

Monopoly 先生想选择若干城镇建设充电站,使得对于每一对不同的城镇,都存在一条连接它们的简单路线,并且这条路线经过至少一个建有充电站的城镇。

请你帮助 Monopoly 先生,找出满足条件的最小规模城镇集合。

输入格式

第一行两个整数:

N,MN,M

表示城镇数量和道路数量。

接下来 $$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$$ 中的任意两个城镇之间,都存在一条经过至少一个充电站的简单路线。

注意,使用单个充电站是不可能满足条件的。

数据范围

对于所有测试数据,满足:

1N3×1051\le N\le 3\times 10^5 N1M1.5×106N-1\le M\le 1.5\times 10^6

保证道路网络连通。

子任务

子任务 分值 依赖子任务 $$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。本版本已改为标准输入输出形式:直接读入图,输出一个最小充电站集合。

由于最优解可能不唯一,本题使用特殊评测。评测程序会检查:

  1. 输出的充电站数量是否等于标准答案数量;
  2. 输出点编号是否合法且没有重复;
  3. 输出集合是否真的满足题目要求。