社区讨论

简单做法分享

P2764最小路径覆盖问题参与者 9已保存回复 8

讨论操作

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

当前回复
8 条
当前快照
1 份
快照标识符
@mhj45hxt
此快照首次捕获于
2025/11/03 20:25
4 个月前
此快照最后确认于
2025/11/03 20:25
4 个月前
查看原帖
使用 (x,y)(x,y) 表示一条流量为 xx,费用为 yy 的边。
看到“必须到达每个点”,不难想到把每个点拆成 in,outin,out,连边:
旧思路折叠
  • inT,(1,0)in\to T,(1,0),必须到达一点
  • Sout,(1,0)S\to out,(1,0),补偿上一步消耗的流量
  • Sin,(1,1)S\to in,(1,1),新开启一条路径
  • iniouti,(1,0)in_i\to out_i,(1,0)
  • 对于原图的边 (u,v)(u,v)outuinv,(1,0)out_u\to in_v,(1,0)
然而这是不对的。问题在于,outout 点可能接受了 22 的流量(第二类和第四类)。解决方法也很简单,新开一个点 psps,连边 outipsiout_i\to ps_i 并将原先第五类 outinout \to in 的边改为 psinps\to in,即让每个 outout 仅有一条出边被留过。这样就可以解决问题了。
但是这似乎有些繁琐,考虑更简单的方案。
发现上面的一,二两类边已经完全覆盖了第四类边的作用。所以我们直接删去第四类边。这样,上面的 outout 接受大于 11 的流量的问题也随之解决。
所以,可以得到本题做法如下。
  • inT,(1,0)in\to T,(1,0),必须到达一点
  • Sout,(1,0)S\to out,(1,0),补偿上一步消耗的流量
  • Sin,(1,1)S\to in,(1,1),新开启一条路径
  • 对于原图的边 (u,v)(u,v)outuinv,(1,0)out_u\to in_v,(1,0)
仍然可以通过。
构造方案应该是简单的,不再赘述。

回复

8 条回复,欢迎继续交流。

正在加载回复...