问题描述:
W 教授正在为国家航天中心计划一系列的太空飞行。每次太空飞行可进行一系列商业
性实验而获取利润。现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这
些实验需要使用的全部仪器的集合I={I1,I2,…In}。实验Ej需要用到的仪器是I的子集RjÍI。
配置仪器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

分析:

刚拿到这题很迷茫,上网搜了相关的资料,说是最大闭合权图的问题,然后去看了胡伯涛《最小割模型在信息学竞赛中的应用》,然后又去下载了相关的最小割与最大流的相关理论,最后终于明白了这道题目。这题是最大权闭合图问题,可以转化成最小割问题,可用最大流解决。

把每个仪器看作X顶点,把实验看作Y顶点,增加S和T点。

S点连接所有的X顶点,权值为每个仪器的费用,T点连接所有实验,权值是收入。

如果实验需要相应的仪器,则把对应的X,Y顶点相连,权值为无穷大,

那么最大收入则为所有实验的收入减去最小割,根据最小割最大流定理,最小割就是最大流。

对应的解就是最小割划分出的T集合中的点,也就是最后一次寻找增广路径时不能从S访问到的顶点。

然后,上网又看了一下Edmonds-Karp算法,发现网络上有个版本比我现在用着的快一点,我用的版本是求出所有的增广路,最后检查T的可行性,而那个版本是只要增广路到了T点,就立刻更新流。觉得很好用,就把写好的算法又改了一下。具体区别可对比我的上一题 01飞行员配对方案问题。

代码:

#include<cstdio>
#include<sstream>
#include<iostream>
#include<queue>
#include<string>
#include<cstring>
using namespace std;
const int INF = 100000000;
int main()
{
int cap[101][101];
int flow[101][101];
int n,m,f=0;
scanf("%d%d",&m,&n);
getchar();
char temp[100];
int cost,num,sum=0;
int s=0,t=n+m+1;
//建图
for(int i=1;i<=m;i++){
cin.getline(temp,100);
stringstream in(temp);//string流
in>>cost;
sum+=cost;
cap[n+i][n+m+1]=cost;
while(in>>num) cap[num][n+i]=INF;
}
for(int i=1;i<=n;i++){
scanf("%d",&cost);
cap[0][i]=cost;
}
//Edmonds-Karp算法求最大流
queue<int> q;
int a[101];
int p[101];
memset(a,0,sizeof(a));
q.push(s);
a[0]=INF;
while(!q.empty()){
int now=q.front();
q.pop();
for(int i=1;i<=t;i++) if(!a[i]&&cap[now][i]>flow[now][i]){
q.push(i);
p[i]=now;
a[i]=min(a[now],cap[now][i]-flow[now][i]);
if(i==t){
for(int i=t;i!=s;i=p[i]){
flow[p[i]][i]+=a[t];
flow[i][p[i]]-=a[t];
}
f+=a[t];
memset(a,0,sizeof(a));
while(!q.empty()) q.pop();
q.push(s);
a[0]=INF;
break;
}
}
}
//输出解
for(int i=n+1;i<t;i++)
if(!a[i]) printf("%d ",i-n);
printf("\n");
for(int i=1;i<=n;i++)
if(!a[i]) printf("%d ",i);
printf("\n");
printf("%d\n",sum-f);
return 0;
}

网络流与线性规划24题02太空飞行计划问题相关推荐

  1. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  2. 题解 【网络流24题】太空飞行计划

    [网络流24题]太空飞行计划 Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,- ...

  3. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有m(m≤50)个实验和n(n≤50)个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬−仪器花费),并输出一组方案. Solution ...

  4. 题解:线性规划与网络流24题 T2 太空飞行计划问题

    太空飞行计划问题 问题描述 W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要 ...

  5. 线性规划与网络流24题 2太空飞行计划问题 最大权闭合图问题(不懂) nefu 476

    太空飞行计划问题 Time Limit 1000ms Memory Limit 65536K description W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而 ...

  6. [网络流24题] No2_太空飞行计划

    727. [网络流24题] 太空飞行计划 ★★☆   输入文件:shuttle.in   输出文件:shuttle.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] W ...

  7. 网络流24题之太空飞行计划——最大权闭合子图

    题目链接:太空飞行计划 [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W ...

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

    题目链接 https://www.luogu.org/problemnew/show/P2762 太空飞行计划 我们从S向所有实验连流量为收入的边(割这条边选择不做这个实验) 从所有的机器向T连边(割 ...

  9. 【网络流24题】太空飞行计划问题

    问题描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业 性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这 些实验需要使用的全部仪 ...

最新文章

  1. 解决弹出框滚动穿透的问题(问题是body也会滚动)
  2. SAP常见问题与解决办法 2
  3. 在一个div里,列表样式图片进行float,实现水平排序
  4. 01-复杂度2 Maximum Subsequence Sum (25 分)
  5. cad vba 打开文件对话框_CAD每次打开系统都会新建一个Acad.vlx文件,如何解决呢?...
  6. 线程池ThreadPoolExecutor使用
  7. 在propreties文件中引用另一个properties文件中的内容
  8. Spring-02-AOP切面编程
  9. #数组元素相乘_C++ 矩阵相乘
  10. (转)原生与胶水之争!CPU和GPU真假大论战
  11. 译文:dBA和dBC的不同
  12. 文件在计算机系统储存具体位置,电脑微信的文件储存位置怎么打开
  13. 第4周编程题在线测试
  14. Java实现回文串的四种方式
  15. hadoop集群基本配置
  16. 常用手机uc浏览器兼容问题记录(陆续补充)
  17. 华中科技大学头歌 交通灯系统设计 Lojisim 详细实验报告,实验图,仅供参考
  18. 那些40岁的程序员都去哪了
  19. 森林中的兔子(超详细解析)
  20. 心海泛舟 | 回首向来萧瑟处,归去,也无风雨也无晴……

热门文章

  1. 【硬件】AD中在圆周外等间距放置器件
  2. 如何创建微信公众号, 微网站 以及发多图文消息
  3. H3CIE A套需求说明
  4. win10设置新建文本文档的快捷一点的方式
  5. Ubuntu操作-03 设置开机自启
  6. 如何下载沧州市卫星地图高清版大图
  7. ttf格式字体怎么安装教程
  8. 什么是ECShop二次开发?
  9. 中国服务器审计系统,OSA 运维安全审计系统
  10. 30 岁转行做程序员,晚了吗?