网络流24题——太空飞行计划问题

来源:互联网 发布:冲压模具设计软件 编辑:程序博客网 时间:2024/05/21 09:14

题目描述

W 教授正在为国家航天中心计划一系列的太空飞行。每次太空飞行可进行一系列商业
性实验而获取利润。现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这
些实验需要使用的全部仪器的集合I={I1,I2,…In}。实验Ej需要用到的仪器是I的子集Rj。
配置仪器Ik的费用为ck美元。实验Ej的赞助商已同意为该实验结果支付pj美元。W教授的
任务是找出一个有效算法,确定在一次太空飞行中要进行哪些实验并因此而配置哪些仪器才
能使太空飞行的净收益最大。这里净收益是指进行实验所获得的全部收入与配置仪器的全部
费用的差额。
«编程任务:
对于给定的实验和仪器配置情况,编程找出净收益最大的试验计划。


输入格式

由文件input.txt提供输入数据。文件第1行有2 个正整数m和n。m是实验数,n是仪
器数。接下来的m 行,每行是一个实验的有关数据。第一个数赞助商同意支付该实验的费
用;接着是该实验需要用到的若干仪器的编号。最后一行的n个数是配置每个仪器的费用。


输出格式

程序运行结束时,将最佳实验方案输出到文件output.txt 中。第1 行是实验编号;第2
行是仪器编号;最后一行是净收益。


样例输入

2 3
10 1 2
25 2 3
5 6 7


样例输出

1 2
1 2 3
17

恩,其实一开始我不太懂最大闭合权图,就跟着感觉建图就建出来了。
然后贴了个Dinic的模板,交了一次RE。。这就很尴尬了!
唔,仔细看了一下,似乎是数组开小了的样子(捂脸)
改大一点儿,我发誓,我真的就改大了一点,就多了一个0嘛!
然后就TLE了(心塞)

简单说说我的建图吧!
先找一个超级源点s和超级汇点t
再把所有的实验和s点连起来,支付的报酬作为这些边的容量
然后嘞,把所有的器材和t点连起来,再把器材的成本作成这些边的容量
最后一类边,把实验和对应的器材连起来,容量为INF(就是很大的一个数)

接下来,很好玩儿的事情来了!!!
跑一次Dinic得到最大流。然后答案就是报酬总和-最大流的值!!!
是不是很神奇!其实当时我就抱着试试看的心态,结果一不小心就过了(捂脸)

咱们来理解一下啦啦啦~
我们先假设啊,我们把所有的报酬都拿走了来进行实验的选择,然后我们就有了好多好多钱。
如果不选某项实验,我们就把报酬退回去就好了嘛!
这样就统一了报酬和成本。
简而言之,我们就是在求支出了多少!

然后,再根据dinic最后增流的路径来判断选择了那些
完美的TLE!

接下来,就是见证奇迹的时刻。
这个奇迹就是,就算百般不愿!我们还是得学最大权闭合图!!!

于是乎,我们来扯扯quq
唔,有什么好扯的(摔!)
看神犇的博客啊QAQ
放地址:(好像神犇也素转载的样纸)最大权闭合图

我的代码就不放了,因为有毒!
下午2点交AC了,晚上再交就TLE了quq

代码参考这里:太空飞行计划问题

唔,看了一下感觉是读入的问题。
唔,滚去学习了当前弧优化,然而还是TLE了quq
好像是读入慢了一丢丢,感觉真的只有一丢丢!实际上尊的只有一丢丢!
因为在下自行生成了一组极限数据,发现跑了1007ms。。
简直心塞有木有!有!

然而,木有什么办法,大佬的读入我不会,所以就继续TLE好了quq
贴了个代码,改了下读入,然后过了,然后就不想管啦quq
我发誓,只是读入的问题QAQ

0 0