#CCSP201802. [CCSP2018] 贪心算法
[CCSP2018] 贪心算法
时间限制: 2.0 秒
空间限制: 512 MB
题目描述
点独立集是图论中的概念。一个点独立集是一个图中一些两两不相邻的顶点的集合,亦即一个由顶点组成的集合 ,使得 中任两个顶点之间没有边。顿顿设计了一个在无向图上求解点独立集的算法,希望你可以帮他实现一下。
算法框架
-
对于给定的无向图,不断地使用“归约规则”缩减图的规模,直至无法继续使用为止。
-
当无法使用归约规则时,每次“贪心”地选取一个顶点直接从图中删去,直至能继续使用归约规则或图为空。
-
反复迭代上述步骤,直至图为空。
归约规则
每成功地执行一次规约规则,会将一个顶点选入答案中,选入的顶点按下面的规则唯一确定:
-
若图中有顶点度为 0,则将其中编号最小的选入答案中,并把它从图中删去;
-
否则若图中有顶点度为 1,则将其中编号最小的选入答案中,并把它和它唯一的邻接顶点从图中删去;
-
否则不能成功执行规约规则。
贪心策略
当图中不存在度小于 2 的顶点时,需要从图中贪心地删去一个顶点,被删去的顶点按下面的策略唯一确定:
-
若图中度最大的顶点唯一,则把它从图中删去;
-
否则,在上述顶点中,选择这样的顶点,使得删去它之后,图中剩余的度为 1 的顶点最多。若这样的顶点唯一,则把它从图中删去;
-
否则,在这样的顶点中,选择编号最大的那个从图中删去。
输入格式
从标准输入读入数据。
输入第一行包含用空格分隔的两个正整数 和 ,表示图中有 个顶点、 条无向边,顶点编号从 到 。
接下来 行,每行包含用空格分隔的两个正整数 和 ,表示编号为 和 的两个顶点间有一条无向边。输入数据保证所有的顶点编号()均为 范围内的正整数,保证 且同一条边不会出现多次。
输出格式
输出到标准输出。
按求解顺序输出该点独立集(即每成功地执行归约规则一次就输出一个被选入的顶点),每行输出一个顶点编号。
10 12
1 2
2 3
3 1
2 4
3 4
4 9
4 5
9 10
5 8
8 7
7 6
6 5
10
6
8
1
4
样例 1 解释
输出 ,删去 。
删去 。
输出 ,删去 。
输出 ,删去 。
删去 。
输出 ,删除 。
输出 ,删除 。
子任务
共有四个子任务,每个子任务均包含一个或多个测试点。若你的程序对一个子任务的全部测试点,都能给出正确的输出,则得该子任务的满分,否则该子任务得 0 分。本题满分共计 100 分。
子任务 1(16 分):输入数据保证 且 ,且图中没有环。
子任务 2(17 分):输入数据保证 且 ,且对于任意三个不同顶点 、 和 ,如果 和 之间有边且 和 之间有边,则 和 之间有边。
子任务 3(28 分):输入数据保证 且 。
子任务 4(39 分):输入数据保证 且 。
提示
本题输入输出数据量较大,请选择合理方式进行读写。