【网络流24题】太空飞行计划问题

Description

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

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

Input

文件第 1行有 2个正整数 m和 n。m是实验数,n是仪器数。

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

最后一行的 n个数是配置每个仪器的费用。

Output

程序运行结束时,将最佳实验方案输出。第 1行是实验编号;第 2行是仪器编号;最后一行是净收益。

Sample Input

2 3
10 1 2
25 2 3
5 6 7

Sample Output

1 2
1 2 3
17

HINT

n,m < 50
题解

网络流最大流
首先是建图,将原点到每个实验一次连接一条容量为该实验可以收获的费用的边,将每个仪器到汇点连接一条容量为该仪器所需要的费用的边,从每个实验到其所需要的仪器连接一条容量为inf的边。

图建好之后,求一遍最大流,净收益=所有的实验收入总和-最大流。

code
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 3010
#define inf 0x7fffffff
using namespace std;
struct node
{
    int next,to,s;
};
node Edge[N<<1];
int n,m,tot=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值