题解/算法 {2179. 圆桌问题}
@LINK: https://www.acwing.com/problem/content/description/2181/
;
桌子不一定佔滿, 但所有人都必須有位置;
把M個組 看做最大流裡的M個點, 把N個桌子 看做最大流裡的N個點, 添加一個源點S 和 匯點T;
+(每個組 往所有桌子 鏈接容量為1的有向邊): 表示一個桌子裡 同一組的人 最多只有1個;
+(源點S 往所有組 鏈接容量為組的人數的有向邊): 表示 這個組的人數, 如果有解 則這個組(點)的流量 必須等於該組人數;
+(所有桌子 往匯點T 鏈接容量為桌子的容納人數的有向邊): 表示 該桌子 最多容納的人數;
如果最大流 等於 所有人數(即所有組的人數之和), 則 說明有解;
@DELI;
比如对于A单位 他有2个人A1, A2
, 其实无需对这2个人单独处理, 因为 比如说 A1
为x号桌子, A2
为y号桌子, 那么让他俩反过来也可以; 即只要让同个单位的所有人 都在不同的桌子里即可, 至于究竟是哪个人在几号桌 不用关注;
即 我们把同个单位的所有人, 看做是一个整体 一个点, 向每个桌子 连接一条容量为
1
1
1的有向边(表明: 同个单位里的人 最多一个人在同一个桌子);
然后源点 向每个单位 连接 容量为(单位人数)的有向边;
每个桌子 让终点 连接 容量为(桌子容量)的有向边;
至于输出方案, 对应于 输出可行流, 通过遍历图即可;
@DELI;
旧解释: LINK: https://blog.csdn.net/weixin_42712593/article/details/119082284
;