算法:基于图的解释

时间:2013-06-09 10:49:40

标签: algorithm graph

在Shinchan学习的Futaba幼儿园,有N名学生,s_0, s_1...s_(N-1),包括Shinchan。每个学生都直接或间接地相互了解。如果他们是朋友,两个学生直接相互了解。间接地相互了解意味着有第三个学生知道他们两个。相互了解是一种对称的关系,即如果学生s_a知道学生的话,那么学生也知道学生s_a。

艾尚议是全班同学。她想和所有人成为朋友。但与那里的每一位N学生交朋友都会非常麻烦。所以她决定和他们中的一些人交朋友,这样每个学生都是她的朋友或她朋友的朋友。

帮助她选择那些与他们成为朋友的学生将完成她的目标。学生人数越少越好。

输入

第一行输入将包含两个空格分隔的整数,N M,Futaba幼儿园的学生人数,不包括Ai-chan,以及彼此是朋友的学生对的数量,即他们直接相互了解。然后是M行。在每一行中有两个空格分隔的整数s_u s_v,这样学生s_u和s_v就是彼此的朋友。

输出

在第一行打印此类学生的总数P.然后在下一行打印P空格分隔的学生索引,这样与他们交朋友将帮助艾尚实现她的目标。

约束:

1 <= N <= 10^5

1 <= M <= min(10^5, N*(N-1)/2)

0 <= s_u, s_v <= N-1

s_u != s_v

每对学生(s_u,s_v)直接或间接相互了解。

得分:((N-P)/ N)* 200

**Sample Input**
6 7
0 1
0 2
1 2
1 3
2 4
3 4
3 5

**Sample Output**
4
0 2 3 5

我的意见是友情只有1和3会做这个工作。我错过了什么吗? 我不是在寻找解决方案,只是对样本输入和输出的解释。

1 个答案:

答案 0 :(得分:-1)

解决方案是一种简单的贪婪算法。假设C是学生集。

S = {}
R = {}
while (C != {}) {
   - sort the students based on their number of friends
   - pick the student s with the highest number of friends
   - add R = R + {s}
   - add s and friends of s to the set S and remove them from C
}
print(R)