传送门
比赛网络
题意:给出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的权值。
果然手玩图有一种别样的美丽。。。
Code
#include<cstdio>
using namespace std;
const int sm = 1e4+5;
const int Inf = 0x3f3f3f3f;
int T,N,M,C,tot,Mx;