太空飞行计划问题 网络流24题(2/24)
太空飞行计划问题
题面:
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行是仪器编号;最后一行是净收益。
对于给定的实验和仪器配置情况,编程找出净收益最大的试验计划。
n,m<=50
思路:
最大闭权子图
最大收益为正权值和-最小割
参考文章最大闭权子图
这道题还需要你输出方案,所以看层数dis[]是否最后有没有跑到,因为要盈利肯定是流没跑满的的边
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int N=10005;
int n,m,ss,tt;
int dis[N];
int cur[N];
queue<int> q;struct Edge{int to;int value;int next;}e[N*4];
int head[N],cnt=-1;
void add(int from,int to,int value)
{cnt++;e[cnt].to=to;e[cnt].value=value;e[cnt].next=head[from];head[from]=cnt;
}bool bfs(int s,int t)
{q=queue<int>();memset(dis,-1,sizeof(dis));dis[s]=0;q.push(s);while(!q.empty()){int x=q.front();q.pop();for(int i=head[x];i!=-1;i=e[i].next){int now=e[i].to;if(dis[now]==-1&&e[i].value!=0){dis[now]=dis[x]+1;q.push(now);}}}return dis[t]!=-1;
}int dfs(int x,int t,int maxflow)
{if(x==t)return maxflow;int ans=0;for(int i=cur[x];i!=-1;i=e[i].next){int now=e[i].to;if(dis[now]!=dis[x]+1||e[i].value==0||ans>=maxflow)continue;cur[x]=i;int f=dfs(now,t,min(e[i].value,maxflow-ans));e[i].value-=f;e[i^1].value+=f;ans+=f;}return ans;
}
int Dinic(int s,int t)
{int ans=0;while(bfs(s,t)){memcpy(cur,head,sizeof(head));ans+=dfs(s,t,INF);}return ans;
}
int main()
{memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);int ans=0;ss=0,tt=n+m+1;for(int i=1;i<=n;i++){int c=0;scanf("%d",&c);ans+=c;add(ss,i,c);add(i,ss,0);while(true){char ch=getchar(); if(ch=='\n'||ch=='\r') break;int x;scanf("%d",&x);add(i,n+x,INF);add(n+x,i,0);}}for(int i=1;i<=m;i++){int c;scanf("%d",&c);add(n+i,tt,c);add(tt,n+i,0);}//cout<<ans<<' '<<Dinic(ss,tt)<<endl;//return 0;ans-=Dinic(ss,tt);for(int i=1;i<=n;i++)if(dis[i]!=-1) printf("%d ",i);printf("\n");for(int i=1;i<=m;i++)if(dis[i+n]!=-1) printf("%d ",i);printf("\n");printf("%d\n",ans);return 0;
}
太空飞行计划问题 网络流24题(2/24)相关推荐
- 太空飞行计划问题(网络流24题,七)
太空飞行计划问题 题目分析: 是一道中问题,就不深入的分析了.就是叫你求给你M个实验,N个仪器.每个实验要用到N个仪器中的一些,而每个仪使用每个仪器都要花费一些钱.而完成每个实验会有一定的报酬, ...
- Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)
[网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...
- LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图
#6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...
- 题解 【网络流24题】太空飞行计划
[网络流24题]太空飞行计划 Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,- ...
- LOJ6001 - 「网络流 24 题」太空飞行计划
原题链接 Description 有m(m≤50)个实验和n(n≤50)个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬−仪器花费),并输出一组方案. Solution ...
- [网络流24题] No2_太空飞行计划
727. [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W ...
- PowerOJ 1737 网络流24题之二 太空飞行计划问题(最大权闭合子图)
PowerOJ 1737 网络流24题之二 太空飞行计划问题 原题地址: https://www.oj.swust.edu.cn/problem/show/1737 题意: W 教授正在为国家航天中心 ...
- 网络流24题之太空飞行计划——最大权闭合子图
题目链接:太空飞行计划 [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W ...
- 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)
整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...
最新文章
- python 命令行参数-Python 获得命令行参数的方法(推荐)
- Windows Phone Dev Notes-如何使用ConnectionSettingsTask 来启动连接设置页面
- python最基本的规则是什么_Python基础介绍(一)
- 使用SAP Leonardo上的机器学习服务提取图片的特征向量
- 小程序自带git方法提交时文件冲突的解决
- 启动mysql 1067_启动mysql遇到1067问题
- c语言创建树,递归创建二叉树c语言实现+详细解释
- 4999元起!三星在中国正式发布Galaxy S22系列
- oracle r修改表名,oracle中修改表名
- 系统学习机器学习之神经网络(六) --GrossBerg网络
- 通过python实现txt中,字母概率的计算,以及信源熵的计算,并且输出
- 先验概率、后验概率、贝叶斯公式的通俗解释
- 制造业公司通用的FICO成本核算方法介绍
- Captain Flint and a Long Voyage
- IDEA 使用 hibernate
- 人力资源管理案例选读【1】
- matlab混沌映射,混沌映射MATLAB仿真.docx
- Sql Server 2008R2 安装教程
- 混合现实手术规划模拟系统——阿里云资源+MR技术在医疗行业的典型应用
- 好久没在线了,恩进修(偷懒)中,hahaha~整理一下