题目背景

题目描述

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

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

2 3
10 1 2
25 2 3
5 6 7

输出样例#1:

1 2
1 2 3
17

说明

感谢@zhouyonglong 提供spj//spj好评

解题思路

  最大权闭合子图的入门题,这个模型我是看这篇博文看懂的。图要这样建——

  从S向所有实验连边,边容量为该实验收入,从每个实验向每个需要的设备连边,边权为inf,从每个设备向T连边,边权为该设备费用。

  答案为所有实验的总收入(不用减去成本)的总和减去上图从S到T的最大流。

源代码

#include<queue>
#include<cstdio>
#include<cstring>
int n,m;
int s,t;
struct Edge{int next,to,f;
}e[100010]={0};
int cnt=2,head[100010]={0};
void add(int u,int v,int f)
{e[cnt]={head[u],v,f};head[u]=cnt++;e[cnt]={head[v],u,0};head[v]=cnt++;
}int dis[100010]={0};
bool vis[100010]={0};
bool bfs()
{memset(dis,0,sizeof(dis));memset(vis,0,sizeof(vis));dis[s]=1;std::queue<int> q;q.push(s);vis[s]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=e[i].next){int v=e[i].to;if(!dis[v]&&e[i].f>0){dis[v]=dis[u]+1;q.push(v);vis[v]=1;}}}return dis[t]!=0;
}int dfs(int u,int flow)
{if(u==t||flow==0) return flow;int flow_sum=0;for(int i=head[u];i;i=e[i].next){int v=e[i].to,f=e[i].f;if(dis[v]!=dis[u]+1||f==0) continue;int temp=dfs(v,std::min(flow-flow_sum,f));e[i].f-=temp;e[i^1].f+=temp;flow_sum+=temp;if(flow_sum>=flow) break;}if(!flow_sum) dis[u]=-1;return flow_sum;
}int dinic()
{int ans=0;while(bfs()){while(int temp=dfs(s,0x7fffffff))ans+=temp;}return ans;
}int main()
{//freopen("shuttle.in","r",stdin);//freopen("shuttle.out","w",stdout);scanf("%d%d",&m,&n);s=n+m+1,t=s+1;int ans=0;for(int i=1,w;i<=m;i++){scanf("%d",&w);ans+=w;add(s,i,w);char ch=getchar();while(ch==' '){scanf("%d%c",&w,&ch);add(i,w+m,0x7fffffff);}}for(int i=1,w;i<=n;i++){scanf("%d",&w);add(m+i,t,w);}int temp=ans-dinic();for(int i=1;i<=m;i++)if(vis[i]) printf("%d ",i);printf("\n");for(int i=1;i<=n;i++)if(vis[i+m]) printf("%d ",i);/*for(int i=head[s];i;i=e[i].next)if(e[i^1].f>0) printf("%d ",e[i].to);printf("\n");for(int i=head[t];i;i=e[i].next)if(e[i].f>0) printf("%d ",e[i].to-m);*/putchar('\n');printf("%d\n",temp);return 0;
}

转载于:https://www.cnblogs.com/wawcac-blog/p/7100586.html

洛谷 P2762 太空飞行计划问题相关推荐

  1. 洛谷 P2762 太空飞行计划问题(自己理解的口胡版)

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

  2. 洛谷 - P2762 太空飞行计划问题(最大权闭合图+路径打印)

    题目链接:点击查看 题目大意:给出n个实验,每个实验完成之后都可以得到一定的奖金,但每个实验需要特殊的器械才可以完成,准备器械又需要一定的支出,现在问如何选择实验才能让利润最大化,并输出需要选择的实验 ...

  3. 洛谷_2762 太空飞行计划问题

    题意 给出一些实验和器材,每种实验需要一些器材,每种实验如果做了可以获取一定的收益但是要支付实验器材相应的代价.器材如果买过了就不用再买了.现在给出一些实验和器材的收益和价值,求出我们最多能获得多少收 ...

  4. 洛谷2762 太空飞行计划问题

    传送门 题目大意 给定n个实验,m种器材,每个实验都需要使用一些器材.进行某个实验会获得该实验的经费,但是如果没有该实验所需要的仪器,就需要花费一些钱来购买.求选择哪些实验所获得的收益最大. 解题思路 ...

  5. luogu P2762 太空飞行计划问题(最大权闭合图)

    luogu P2762 太空飞行计划问题(最大权闭合图) 题目大意 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={ ...

  6. P2762 太空飞行计划问题

    \(\color{#0066ff}{题目描述}\) W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-, ...

  7. P2762 太空飞行计划问题【最大权闭合子图 】

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

  8. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

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

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

最新文章

  1. Java实现SSH模式加密
  2. poi方式写入数据到Excel
  3. Mac连接路由器后没有反应_无线WiFi无法连接到网络怎么办【解决方法】
  4. 用python输入任意三条边长_如何用python求第三条边边长
  5. python监控服务器信息进行可视化_Python实现数据可视化,看如何监控你的爬虫
  6. SSM项目-山东医院-可行性配置-1
  7. mysql 存储过程 查询语句怎么写_mysql 查询数据库中的存储过程与函数的语句
  8. 2020-12-13:C语言钱币兑换问题
  9. 操作系统原理(一)操作系统的认识
  10. 面向接口编程思想(的好处)
  11. NPOI iTextSharp导出Excel并加水印
  12. python transforms_PyTorch教程【六】Transforms的使用
  13. 【养生之道】男人养生的秘诀
  14. gamemaker 更新 runtime 快一点
  15. 《理想藏书》书籍推荐
  16. tushare pro的token凭证码设置教程详解
  17. Robitcs,CV,ASR,TTS,NLP,KG,CG是什么
  18. linux和Windows线程进程的区别
  19. 2015-8-25股市大跌
  20. 本地BLAST的使用

热门文章

  1. Cookie文件内容的含义
  2. LintCode Python 简单级题目 491.回文数
  3. jQuery 的属性操作方法
  4. 1,通过代码自定义cell(cell的高度不一致)的基本步骤
  5. MVC4发布到IIS7报404错误
  6. WPF自定义控件 —— 布局
  7. java 类 解析_Java类详解
  8. android x866.0 教程,海尔暴风AmlogicT866平台升级步骤教程
  9. (08)Vivado时钟约束
  10. (56)FPGA条件选择有优先级(case)