题目链接:
http://poj.org/problem?id=1112
题目大意:
有编号为1~n的n个人,给出每个人认识的人的编号,注意A认识B,B不一定认识A,让你将所有的人分成两组,要求每组的人相互认识,且两组的人数要尽可能的接近。
求出每组的人的编号。
解题思路:
图论+背包(输出物品)。
相互认识的关系不好确定分组,如果转换思路,考虑相互不认识的情况就简单好多,如果A不认识B,且B不认识C,那么A和C必须分到同一组里。所以就想到了,连通分量的染色,相邻的两个染不同的颜色(0或1),每一个连通分量分成两组,并且相同颜色的人不能有边(一定要相互认识),容易知道不同连通分量的人一定相互认识,否则是连通的。
然后问题就转化为有多个连通分量,每个连通分量有两组,每组必须属于一个队,求两个队的人数差最小,并分别输出两队的人。
dp[i][j]表示到了第i个连通分量,且第一个队的人数为j时是否能够恰好凑齐。
POJ 1112 解题报告:图论结合动态规划求解团队分配

博客讲述了如何解决POJ 1112题目,即给定人与人之间的认识关系,将所有人分成两组,使得组内成员相互认识且人数差异最小。博主通过转换问题,利用图论中的连通分量染色和动态规划的方法,设计了算法。最终,通过dp数组记录状态,并回溯得到具体分组方案,实现了两队人数差最小的团队分配策略。
最低0.47元/天 解锁文章
985

被折叠的 条评论
为什么被折叠?



