每期一题之1:小朋友开party

本系列打算选取一些在各种地方遇到的有意思的题目,每次发一道,然后下期发布题解和新题目。本来想叫“每周一题”,但是觉得我不一定能保证频率……题目大多是接近编程算法面试/算法竞赛的思考方式,但我会尽量避免需要太多算法背景知识的题目。难度的话,大概是作为竞赛题是中等偏简单,作为面试题是相当难的,实际上这些应该都不太适合作为面试题,不全是因为难度,主要因为考察的重点不太一样。

废话不多说,小镇做题家GoGoGo——

全班有N个小朋友,你打算邀请全部或一部分小朋友来参加一个party。小朋友两两之间有可能有好朋友关系,如果一对好朋友都出现在party上,他们就要吃一个蛋糕。注意是每对关系对应一个蛋糕,比如ABCD四个人,两两之间都是好朋友且四个人都被邀请了,那么就需要6个蛋糕(AB,AC,AD,BC,BD,CD)。由于某种神秘原因,你只能准备出偶数个蛋糕,所以你可能不得不放弃邀请某些小朋友。每个小朋友有一个正数权重数值,表示如果他没被邀请的话,他的不开心程度是多少。现在要找一个方案使得所有缺席小朋友的不开心程度之和最小。

用图论的语言来说:给定一个无向图,图里的每个点有一个正权值。图里没有重边(任何两个点之间最多有一条边)没有自环(每条边的两个顶点不是相同的)。现在要求删掉图中的若干个点(当然,同时也删去与这些点相连的边),使得刚好剩下偶数条边。要求删掉的点的权值之和最小。

样例1:三个人权重分别为1,2,3,权重2和3的两个人是好朋友。如果全邀请的话需要一个蛋糕,不满足要求。此处最优解是邀请权重1和3的两人,这样不需要蛋糕,不开心值是2。

样例1

样例2:五个人权重分别为1,2,3,4,5,朋友关系如图所示。最优解是邀请3,4,5,不需要蛋糕,不开心值是3。

样例2

样例3:五个人权重是1,2,3,4,100,朋友关系如图所示。一种最优解是邀请3,4,100,需要两个蛋糕,不开心值是3。另一种最优解是只放弃3,需要两个蛋糕,不开心值也是3。另外一种得到偶数蛋糕的方法是只放弃100,这样需要四个蛋糕,但不开心值太高了。

样例3

来源:Codeforces 810 Div2 Problem B

Leave a Reply

Your email address will not be published.