网络流24题:P2762 太空飞行计划问题
P2762 太空飞行计划问题
题目背景
题目描述
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行是仪器编号;最后一行是净收益。
输入输出样例
2 3
10 1 2
25 2 3
5 6 7
1 2
1 2 3
17
说明
感谢@zhouyonglong 提供spj
分析
网络流经典建模题,最大权闭合子图,注意建图,
建立源点S,汇点T,S向每个实验连边容量为获益,每个器材向T连边容量为费用,其他的边容量为正无穷,求最小割(=最大流);
code
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring> using namespace std; const int INF = 0x7fffffff;
const int MAXN = ;
struct Edge{
int to,c,nxt;
}e[]; int head[MAXN],dis[MAXN];
int s,t,tot=;
queue<int>q; int read(int &x)
{
x = ;char ch = getchar();
for (; ch<''||ch>''; ch = getchar());
for (; ch>=''&&ch<=''; ch = getchar())
x = x*+ch-'';
if (ch==||ch==) return ;
return ;
}
void add_edge(int u,int v,int w)
{
e[++tot].c = w,e[tot].to = v,e[tot].nxt = head[u];
head[u] = tot;
e[++tot].c = ,e[tot].to = u,e[tot].nxt = head[v];
head[v] = tot;
}
bool bfs()
{
memset(dis,-,sizeof(dis));
dis[s] = ;
q.push(s);
while (!q.empty())
{
int u = q.front();
q.pop();
for (int i=head[u]; i; i=e[i].nxt)
{
int v = e[i].to;
if (dis[v]==-&&e[i].c>)
{
dis[v] = dis[u]+;
q.push(v);
}
}
}
return dis[t]!=-;
}
int dfs(int u,int low)
{
if (u==t) return low;
int w,tmp = low;
for (int i=head[u]; i; i=e[i].nxt)
{
int v = e[i].to;
if (dis[v]==dis[u]+&&e[i].c>)
{
w = dfs(v,min(e[i].c,low));
e[i].c -= w;
e[i^].c += w;
low -= w;
}
}
return tmp - low;
}
int main()
{
int ans = ,sum = ,m,n,flag;
read(m),read(n);
s = ,t = n+m+;
for (int x,i=; i<=m; ++i)
{
flag = ;
read(x);
sum += x;
add_edge(s,i,x);
while (flag)
{
flag = read(x);
add_edge(i,x+m,INF);
}
}
for (int x,i=; i<=n; ++i)
{
read(x);
add_edge(i+m,t,x);
}
while (bfs())
ans += dfs(s,INF);
for (int i=; i<=m; ++i)
if (dis[i]!=-) printf("%d ",i);
printf("\n");
for (int i=m+; i<=t; ++i)
if (dis[i]!=-) printf("%d ",i-m);
printf("\n%d\n",sum-ans);
return ;
}
网络流24题:P2762 太空飞行计划问题的更多相关文章
- LOJ6001 - 「网络流 24 题」太空飞行计划
原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...
- LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图
#6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...
- Luogu 2762 太空飞行计划 / Libre 6001 「网络流 24 题」太空飞行计划 (网络流,最大流)
Luogu 2762 太空飞行计划 / Libre 6001 「网络流 24 题」太空飞行计划 (网络流,最大流) Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行 ...
- 题解:线性规划与网络流24题 T2 太空飞行计划问题
太空飞行计划问题 问题描述 W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要 ...
- 【刷题】LOJ 6001 「网络流 24 题」太空飞行计划
题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合 \(E = \{ E_1, E_2, \cdots, E_m ...
- LibreOJ #6001. 「网络流 24 题」太空飞行计划
\(\quad\) 与网络流有关的最值有三个:最大流,最小费用,最小割.这道题是最小割.想了好久,终于想明白最小割应该怎么用. \(\quad\) 先找出矛盾的事物.在这道题中,两件事是矛盾的:做实验 ...
- [Cogs727] [网络流24题#2] 太空飞行计划 [网络流,最小割]
建图:源点—(w[i])—>实验—(∞)—>仪器—(cost[i])—>汇点, 如果该实验造成收益,则仪器到汇点的边在最小割中, 如果该实验造成损失,则源点到实验的边在最小割中, 故 ...
- 【PowerOJ1737&网络流24题】太空飞行计划问题(最小割)
题意: 思路: #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned in ...
- 洛谷 P2762 太空飞行计划问题 P3410 拍照【最大权闭合子图】题解+代码
洛谷 P2762 太空飞行计划问题 P3410 拍照[最大权闭合子图]题解+代码 最大权闭合子图 定义: 如果对于一个点集合,其中任何一个点都不能到达此集合以外的点,这就叫做闭合子图.每个点都有一个权 ...
随机推荐
- synchronized锁——8锁
前言 多线程是Java面试中最喜欢问的问题之一,有一篇公众号推文内容很详细,推荐看看 但凡面试官考“多线程”,一定会问这10个问题! 本文中仅对synchronized关键字的加锁进行一定分析 一.标 ...
- chroot 的应用
http://www.williamlong.info/archives/3864.html http://my.oschina.net/u/1590519/blog/342576
- Java 编码规范有感
应小组要求,开发测试都需要考阿里编码规范,因此,相当于是突击了一下关于编码规范方面的知识,目前做的项目后期需要进行项目迁移,数据迁移,功能迁移... 各种迁移... 阿里巴巴编码规范(Java)考试地 ...
- mui的ajax例子2
mui.post()方法 前端页面: <!DOCTYPE html><html><head> <meta charset="utf-8"& ...
- ArcGIS for Android 中实现要素绘制时固定MapView
最近在项目中遇到这么一个情况,在MapView中要求实现绘制点.线.面. 在这里面就会遇到这么一个问题,绘制折线和多边形型时,每点击一个点屏幕就会跟着晃,使用起来很不方便(使用Note2 触控笔),所 ...
- Spring Boot概要
1.Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置)的理念,使用户的项目实现快速运行.通过学习Spring Boot中的配置文件application. ...
- CheckPoint_vSEC_Cluster_R77.30
CheckPoint_vSEC_Cluster_R77.30 平台: arm 类型: ARM 模板 软件包: Check Point vSEC Gateway R77.30-041.161 Anti- ...
- 爬虫爬取代理IP池及代理IP的验证
最近项目内容需要引入代理IP去爬取内容. 为了项目持续运行,需要不断构造.维护.验证代理IP. 为了绕过服务端对IP 和 频率的限制,为了阻止服务端获取真正的主机IP. 一.服务器如何获取客户端IP ...
- geoNear查询 near查询的升级版
geoNear查询可以看作是near查询点进化版 geoNear查询使用runCommand命令进行使用,常用使用如下: db.runCommand({ geoNear:<collection& ...
- pycharm 安装插件 支持markdown
github项目中的README文件通常是md格式的,但是pycharm默认是不支持的,需要安装插件 进入settings中搜索plugins,然后在plugins中搜索markdown suppor ...