【问题描述】

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

【编程任务】

对于给定的实验和仪器配置情况,编程找出净收益最大的试验计划。

【数据输入】

第1行有2个正整数m和n(m,n <= 100)。m是实验数,n是仪器数。接下来的m行,每行是一个实验的有关数据。第一个数赞助商同意支付该实验的费用;接着是该实验需要用到的若干仪器的编号。最后一行的n个数是配置每个仪器的费用。

【结果输出】

第1行是实验编号;第2行是仪器编号;最后一行是净收益。

【输入文件示例】shuttle.in

  1. 2 3
  2. 10 1 2
  3. 25 2 3
  4. 5 6 7

【输出文件示例】shuttle.out

  1. 1 2
  2. 1 2 3
  3. 17
  1. //最大闭合权图
  2. #include<cstdio>
  3. #include<iostream>
  4. #define N 210
  5. #define M 20010
  6. #define inf 1000000000
  7. using namespace std;
  8. int head[N],dis[N],q[N],flag[N],n,m,cnt=,ans,S,T;
  9. struct node{
  10. int v,pre,f;
  11. };node e[M];
  12. void add(int u,int v,int f){
  13. e[++cnt].v=v;e[cnt].f=f;e[cnt].pre=head[u];head[u]=cnt;
  14. e[++cnt].v=u;e[cnt].f=;e[cnt].pre=head[v];head[v]=cnt;
  15. }
  16. bool bfs(){
  17. for(int i=;i<=T;i++)dis[i]=inf;
  18. int h=,t=;q[]=S;dis[S]=;
  19. while(h<t){
  20. int now=q[++h];
  21. for(int i=head[now];i;i=e[i].pre){
  22. int v=e[i].v;
  23. if(e[i].f&&dis[v]>dis[now]+){
  24. dis[v]=dis[now]+;
  25. if(v==T)return true;
  26. q[++t]=v;
  27. }
  28. }
  29. }
  30. return dis[T]!=inf;
  31. }
  32. int dinic(int now,int f){
  33. if(now==T)return f;
  34. int rest=f;
  35. for(int i=head[now];i;i=e[i].pre){
  36. int v=e[i].v;
  37. if(e[i].f&&dis[v]==dis[now]+){
  38. int t=dinic(v,min(rest,e[i].f));
  39. if(!t)dis[v]=;
  40. e[i].f-=t;
  41. e[i^].f+=t;
  42. rest-=t;
  43. }
  44. }
  45. return f-rest;
  46. }
  47. void dfs(int x){
  48. for(int i=head[x];i;i=e[i].pre){
  49. if(e[i].f&&!flag[e[i].v]){
  50. flag[e[i].v]=;
  51. dfs(e[i].v);
  52. }
  53. }
  54. }
  55. int main(){
  56. //freopen("jh.in","r",stdin);
  57. freopen("shuttle.in","r",stdin);
  58. freopen("shuttle.out","w",stdout);
  59. scanf("%d%d",&n,&m);
  60. S=;T=n+m+;
  61. for(int i=;i<=n;i++){
  62. int x;scanf("%d",&x);
  63. add(S,i,x);ans+=x;
  64. char c;int num=;
  65. while((c=getchar())!='\r'){
  66. if(c>=''&&c<='')num=num*+c-'';
  67. else if(num)add(i,n+num,inf),num=;
  68. }
  69. add(i,n+num,inf);num=;
  70. }
  71. for(int i=;i<=m;i++){
  72. int x;scanf("%d",&x);
  73. add(i+n,T,x);
  74. }
  75. while(bfs())ans-=dinic(S,inf);
  76. dfs();
  77. for(int i=;i<=n;i++)
  78. if(flag[i])printf("%d ",i);
  79. printf("\n");
  80. for(int i=n+;i<=n+m;i++)
  81. if(flag[i])printf("%d ",i-n);
  82. printf("\n%d",ans);
  83. return ;
  84. }

[网络流24题] 太空飞行计划(cogs 727)的更多相关文章

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

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

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

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

  3. P2762 [网络流24题]太空飞行计划问题(最小割)

    地址 最大权闭合子图裸题,不说了吧,求方案就是把s集遍历一遍. 错误记录:dfs那块忘判断残量了,11分×1. #include<cstdio> #include<iostream& ...

  4. [网络流24题] 太空飞行计划问题 (最大流->最大权闭合图)

    洛谷传送门 LOJ传送门 做这道题之前建议先看这篇论文,虽然论文里很多地方用了很多术语,但hbt神犇讲得很明白 这篇题解更加偏向于感性理解 把问题放到二分图上,左侧一列点是实验,权值为$p[i]$,右 ...

  5. LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图

    #6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  6. Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)

    Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流) Description 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. ...

  7. LOJ #6008. 「网络流 24 题」餐巾计划

    #6008. 「网络流 24 题」餐巾计划 题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_ir​i​​ 块餐巾.餐厅可以购买新的餐巾,每块餐 ...

  8. [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划

    [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...

  9. 【hjmmm网络流24题补全计划】

    本文食用方式 按ABC--分层叙述思路 可以看完一步有思路后自行思考 飞行员配对问题 题目链接 这可能是24题里最水的一道吧... 很显然分成两个集合 左外籍飞行员 右皇家飞行员 跑二分图最大匹配 输 ...

随机推荐

  1. WebStorm设置编辑器中的字体大小

    启动webStorm之后,点击“FIle"菜单,选择其下的”Settings" 2.在左侧的菜单中选择“Editor/Colors & Fonts/Font 在右侧Sche ...

  2. POJ1011

    今天搞了一下传说中的经典搜索题——poj1011,果然里面充斥着各种巧妙的剪枝,做完之后回味一下还是感觉构思太巧妙,所以总结记录一下加深理解. 原题:http://poj.org/problem?id ...

  3. java web 相对路径中已/开头和不已/开头的区别

    通俗的讲,有/会从跟目录开始算,没有会从当前目录开始算 1.前台页面 ​页面中向服务器页面请求静态资源且没有指定<base href="<%=basePath%>" ...

  4. weapp微信小程序初探demo

    https://github.com/donglegend/weapp-demo 参考文档开发工具安装微信weapp API git项目源码微信小程序 demo效果展示效果预览

  5. mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI

    1. [intrinsic column flags] (基本字段类型标识) - PK: primary key (column is part of a pk) 主键 - NN: not null ...

  6. 客户端安全-xss-1类型介绍

    1.需求 xss的有哪些类型的了解 2.xss的类型 1.反射 xss 2.存储 xss 3.Dom based xss 3.类型详解 1.反射xss例子 <?php echo 3; $a = ...

  7. jquery版时钟(css3实现)

    做时钟的主要原因是因为喜欢,觉得它好看(本人对特效有点爱不释手……).做的时候感觉工程量会有点大,做着做着发现实现起来其实并不难,只要理清思绪,其实还蛮简单的(我制作东西喜欢整体方向制定好,然后边做边 ...

  8. static小结

    1.隐藏:编译多个文件时,所有未加static的全局变量.全局函数都具有全局可见性. 如果加了static,就会对其他源文件隐藏,利用这一特性可以在不同文件中定义相同的 变量名或函数名,而不用担心冲突 ...

  9. 正在使用广告标识符 (IDFA)

    APP提交审核后,apple方面一直说我使用了IDFA,APP里没有集合任何广告SDK. 怀疑是其他第三方的SDK用了. 检测命令 //在项目的根目录下用终端执行 grep -r advertisin ...

  10. jQuery常用API

    jQuery API查询网址 http://jquery.cuishifeng.cn/ Dom和jquery相互装换 jquery对象[0] => Dom对象 Dom对象 => $(Dom ...