【UVA11865】比赛网络(二分+有向生成树)

传送门

    比赛网络
    题意:给出n个节点,m条有向边,每条边有花费与带宽。求解在最大花费为C的条件下构建从点0能够到达任意节点的有向图的最小带宽最大值。

I think

    二分+最小树形图模板
    很偷懒地把训练指南上的讲解piao过来……

固定根的最小树形图可以用朱-刘算法解决。首先是预处理,删除自环并判断根节点是否可以到达其他节点,如不是,输出无解终止程序。
算法主过程。首先给所有非根节点选择一条权值最小的边,若所选出的n-1条边不构成圈,则可证明构成了一个最小树形图,否则把每个圈收缩成一个点,继续上述过程。
缩圈之后,圈上所有边都消失了,因此在最终答案里需要累加上这些边权之和。但这样做有个问题:假设在某次算法的迭代中,把圈C收缩为了人工节点v,则在下一次迭代中,给v选择的入弧将与v在圈C中的入弧发生冲突。如图所示,x在圈内已经有了入弧Y–>X;若收缩之后又选了一个入弧Z–>X,必须把弧Y–>X从最小树形图中删掉。这等价于把弧Z–>X的权值减小了Y–>X的权值。

图A

果然手玩图有一种别样的美丽。。。

Code

#include<cstdio>
using namespace std;

const int sm = 1e4+5;
const int Inf = 0x3f3f3f3f;

int T,N,M,C,tot,Mx;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值