在Shinchan学习的Futaba幼儿园,有N名学生,s_0, s_1...s_(N-1)
,包括Shinchan。每个学生都直接或间接地相互了解。如果他们是朋友,两个学生直接相互了解。间接地相互了解意味着有第三个学生知道他们两个。相互了解是一种对称的关系,即如果学生s_a知道学生的话,那么学生也知道学生s_a。
帮助她选择那些与他们成为朋友的学生将完成她的目标。学生人数越少越好。
输入
第一行输入将包含两个空格分隔的整数,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会做这个工作。我错过了什么吗? 我不是在寻找解决方案,只是对样本输入和输出的解释。
答案 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)