太空飞行计划问题

题目描述

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
题意:不多说。
分析:最大流=最小割,净收益=所有资助费用-最小割。只要利润不为负的实验都要做,都要输出来。
#include<stdio.h>
#include<string.h>
#include<vector>
#include<sstream>
#include<queue>
#include<algorithm>
#define maxn 1000
#define inf 0x7fffffff
using namespace std;
struct edge
{int from,to,cap,flow;
};
vector<edge> edges;
vector<int> G[maxn];
int d[maxn],cur[maxn];
bool vis[maxn];
int s,t;
void init()
{for(int i=0;i<maxn;i++) G[i].clear();edges.clear();
}
void add(int from,int to,int cap)
{edges.push_back((edge){from,to,cap,0});edges.push_back((edge){to,from,0,0});int m=edges.size();G[from].push_back(m-2);G[to].push_back(m-1);
}
bool bfs()
{memset(vis,false,sizeof(vis));memset(d,0,sizeof(d));queue<int> q;q.push(s);d[s]=0,vis[s]=true;while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<G[x].size();i++){edge& e=edges[G[x][i]];if(!vis[e.to]&&e.cap>e.flow){vis[e.to]=true;d[e.to]=d[x]+1;q.push(e.to);}}}return vis[t];
}
int dfs(int x,int a)
{if(x==t||a==0) return a;int flow=0,f;for(int& i=cur[x];i<G[x].size();i++){edge& e=edges[G[x][i]];if(d[x]+1==d[e.to]&&(f=dfs(e.to,min(a,e.cap-e.flow)))>0){e.flow+=f;edges[G[x][i]^1].flow-=f;flow+=f;a-=f;if(a==0) break;}}return flow;
}
int maxflow()
{int flow=0;while(bfs()){memset(cur,0,sizeof(cur));flow+=dfs(s,inf);}return flow;
}
bool fg[400];
int cnt[300];
char sss[300];
int main()
{int m,n;while(scanf("%d%d",&m,&n)==2){int c,x,y;init();s=0,t=m+n+1;int sum=0;memset(cnt,0,sizeof(cnt));for(int i=1;i<=m;i++){scanf("%d",&c);sum+=c;add(s,i,c);getchar();gets(sss);stringstream ss(sss);while(ss>>x){cnt[i]++;add(i,x+m,inf);}}for(int i=1;i<=n;i++){scanf("%d",&c);add(i+m,t,c);}int ans=maxflow();memset(fg,false,sizeof(fg));for(int i=m+1;i<=n+m;i++){for(int j=0;j<G[i].size();j++){edge& e=edges[G[i][j]];if(e.from>e.to||e.to!=t||e.cap==inf) continue;for(int k=0;k<edges.size();k++){int u=edges[k].from,v=edges[k].to;if(u>v) continue;edges[k].flow=edges[k^1].flow=0;edges[k^1].cap=0;}int tem=e.cap;e.cap=0;int me=maxflow();e.cap=tem;if(ans-me==tem) fg[e.from]=true;}}for(int i=m+1;i<=n+m;i++){if(!fg[i]) continue;for(int j=0;j<G[i].size();j++){edge e=edges[G[i][j]];if(e.to==t) continue;cnt[e.to]--;}}for(int i=1;i<=m;i++) if(!cnt[i]) printf("%d ",i); puts("");for(int i=m+1;i<=n+m;i++) if(fg[i]) printf("%d ",i-m); puts("");printf("%d\n",sum-ans);}return 0;
}

线性规划与网络流24题 太空飞行计划问题 (最小割及输出方案)相关推荐

  1. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

  2. 网络流24题-太空飞行计划

    WWW 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合 E=E1,E2,⋯,EmE=E_1,E_2,⋯,E_mE=E1​,E ...

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

    分析 最大权闭合子图模板题 把实验获得的收益看成正权点,仪器费用看成负权点,每个实验向所需要的仪器连边 跑最大权闭合子图即可 详见https://www.cnblogs.com/birchtree/p ...

  4. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

  5. 【网络流24题】餐巾计划问题(最小费用最大流)

    [网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...

  6. 囧——线性规划与网络流24题之网络流入门经典

    搞了好久终于搞定线性规划与网络流24题,不过机器人路径至今无解,第22题感觉是数据错了~~~ 我的代码,数据和题目题解是BYVoid那弄到的:http://download.csdn.net/sour ...

  7. [线性规划与网络流24题] 网络流常见模型

    最近两个月在做<线性规划与网络流24题>这套题,加深了对网络流的理解. 涵盖到的模型有:二分图匹配.二分图的最大独立集.最大权闭合图.有向无环图的最小路径覆盖.最多不相交路径.最大权不相交 ...

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

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

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

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

最新文章

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置图例位置、移除图例)实战
  2. Java和C语言的语句对比
  3. 王琦:5G新视频应用的机会窗口将在2-3年内
  4. Python 通过 pip 安装第三方模块成功,导入该模块失败的解决方法
  5. JSP实战型程序连载:通用数据库连接JavaBean
  6. 引commons-io工具类做文件的复制及导出
  7. SaltStact自动化运维工具03
  8. vlan网络隔离实验
  9. macOS 如何设置壁纸
  10. 计算机无法安装蓝牙驱动,W7系统蓝牙驱动安装失败的原因分析与解决方法
  11. pmf源解析_科研进展 | 不同燃烧排放的一次有机物源谱特征及其在源解析中的应用...
  12. 【读书笔记】之蔡康永的说话之道2
  13. 非参数与半参数统计之核函数
  14. 51单片机——8X8点阵显示
  15. 2019专业创业赛事活动平台
  16. 联想Y450 MAC系统SD读卡器驱动
  17. ERROR:C2678 二进制“<”: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换)
  18. t30服务器u盘如何安装系统,无光驱使用U盘/Ukey/闪存/启动电脑安装winxp sp3的操作系统--梦飞翔的地方(梦翔天空)...
  19. 使用poi将数据库数据表中的数据导出成excel
  20. SVG滤镜+阴影+渐变--学习笔记

热门文章

  1. 8000字详解银行业数据治理架构体系搭建
  2. VS2019安装VA X插件过程
  3. Java制导软件_GitHub - yaoceyi/JavaCC: JavaCC实现简易编译器
  4. 饼图自定义legend文字内容,以及饼图中间显示数量 ,中国地图制作
  5. flink将数据写入redis
  6. js尝试 新年倒计时2023
  7. tec控制pid程序_利用 SPICE 设计 TEC 温度环路 PID 控制
  8. 最全的9款3D建模软件介绍
  9. 基于javaweb的酒店客房管理系统(java+jsp+html+bootstrap+jquery+servlet+mysql)
  10. 如何引用YouTube视频?(APA、MLA、芝加哥、温哥华格式)