专栏文章

AT_arc076_d题解

AT_arc076_d题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioj1vf1
此快照首次捕获于
2025/12/02 20:01
3 个月前
此快照最后确认于
2025/12/02 20:01
3 个月前
查看原文
只需求不加椅子时最多能使多少人有椅子坐。 开始想了一种网络流做法: 1.源点向每个人连一条容量为 11 的边。 2.由于每个人有两种坐法,坐在 LiL_i 及其左边的椅子或坐在 RiR_i 及其右边的椅子,可以考虑把每个椅子拆成 33 个点,将拆出来的点划分为三个部分,第 ii 个人向第一部分的点 LiL_i 连边,向第二部分的点 RiR_i 连边。第一、二部分的点再分别向第三部分的点连边。第三部分的点分别向汇点连一条容量为 11 的边。 3.对于一个人,如果他能坐椅子 LiL_i ,那么编号小于 LiL_i 的椅子他也能坐, 所以对于第一部分的点 ii ,应向点 i1i-1 连边。第二部分的点同理。 之前看到一个ID算法,时间复杂度为 O(km)O(km) ,应该能过,但我不会。
所以还是想有没有直接的贪心做法: 发现最后椅子的分配一定是左边若干个分配给某些人左区间,中间若干把无法分配,其余右边的椅子分配给某些人的右区间,因为靠左的椅子分配给右区间,靠右的分配给左区间,交换它们的分配方式仍然合法。 对每个人按 LiL_i 升序排序,按编号从小到大枚举椅子,分配给可以分的人的左区间,剩下的椅子尽量分给每椅子的人中 RiR_i 更小的,不难发现这样是最优的。

评论

0 条评论,欢迎与作者交流。

正在加载评论...