题解/算法 {2179. 圆桌问题}

题解/算法 {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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值