uva753(最大流)

题意:有若干个电器设备需要不同的适配器才能接上电源,现在你要让尽可能多的电气设备接上电源。首先你手中有n个适配器和适配器的型号,再告诉你有m个电器和他们分别对应的适配器的型号,最后还有一个商店提供买不同型号的适配器转换器,转换是单向的A B表示能把A接口转换成B接口(就是原来需要用A适配器的现在可以用B适配器当然也可以用原来的不变)超市提供的转换器数量是没有限制的,可以无限买。

分析:

方法一:

节点表示插头类型,边表示转换器,然后使用floyd算法,计算出任意一种插头类型能否转换成另外一种插头类型。额外添加一个源点s,从s到设备device[i]连接一条容量为1的边,再额外加一个汇点t,从插座target[i]到t连接一条容量为1的边。然后只要device[i]能够转换成target[i]就在两者间添加一条容量为INF的边,表示允许任意多设备从device[i]转换成target[i]。最后求s-t最大流,m减去最大流就是所要求的答案。编程麻烦,边(弧)较多,但是图中的节点较少(只有插头和插座中出现过的类型)。建图如下。

方法二:

转化为最大流问题首先一个源点连接不同的电器流量为1,不同的电器根据需要连上不同的适配器流量也为1,再根据不同适配器中能转换建立流量为INF的单向边,再根据每个每个适配器拥有的数量从没个适配器连接一条流量为其数量的边至汇点。编程简单,弧较少,但是点数较多。建图如下。

总结:适配器可以不建立中间节点,连边控制流量就好了。

代码:待补。参考https://blog.csdn.net/qq_29169749/article/details/51246779https://www.cnblogs.com/shu-xiaohao/archive/2013/12/16/3476879.html

猜你喜欢

转载自blog.csdn.net/tianwei0822/article/details/92832839