Less Time, More profit 最大权闭合子图(最大流最小割)
Each shop needs products from some plants to make profit of proiproi units.
Building ith plant needs investment of payipayi units and it takes titi days.
Two or more plants can be built simultaneously, so that the time for building multiple plants is maximum of their periods(titi).
You should make a plan to make profit of at least L units in the shortest period.
InputFirst line contains T, a number of test cases.
For each test case, there are three integers N, M, L described above.
And there are N lines and each line contains two integers payipayi, titi(1<= i <= N).
Last there are M lines and for each line, first integer is proiproi, and there is an integer k and next k integers are index of plants which can produce material to make profit for the shop.
1 <= T <= 30
1 <= N, M <= 200
1≤L,ti≤10000000001≤L,ti≤1000000000
1≤payi,proi≤300001≤payi,proi≤30000
OutputFor each test case, first line contains a line “Case #x: t p”, x is the number of the case, t is the shortest period and p is maximum profit in t hours. You should minimize t first and then maximize p.
If this plan is impossible, you should print “Case #x: impossible”
Sample Input
2 1 1 2
1 5
3 1 1 1 1 3
1 5
3 1 1
Sample Output
Case #1: 5 2
Case #2: impossible
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<deque>
#include<iomanip>
#include<vector>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<fstream>
#include<memory>
#include<list>
#include<string>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MAXN 405
#define L 31
#define INF 1000000009
#define eps 0.00000001
#define sf(a) scanf("%lld",&a)
struct plant
{
LL pay, time;
LL id;
bool operator<(const plant& rhs) const
{
return time < rhs.time;
}
};
struct shop
{
LL cnt, time, pro;
LL pl[MAXN];
};
shop s[MAXN];
plant p[MAXN];
LL g[MAXN << ][MAXN << ];
LL level[MAXN<<];
LL T, n, m, l, st, ed, ans, tmp;
bool bfs()
{
memset(level, -, sizeof(level));
level[st] = ;
queue<LL> q;
q.push(st);
while (!q.empty())
{
LL f = q.front();
q.pop();
for (LL i = ; i <= ed; i++)
{
if (level[i] == - && g[f][i] > )
{
level[i] = level[f] + ;
q.push(i);
}
}
}
return level[ed] > ;
}
LL dinic(LL k, LL low)
{
if (k == ed)return low;
LL a;
for (LL i = ; i <= ed; i++)
{
if (level[i] == level[k] + && g[k][i] > && (a = dinic(i, min(low, g[k][i]))))
{
g[k][i] -= a;
g[i][k] += a;
return a;
}
}
return ;
}
void solve()
{
ans = ;
while (bfs())
{
while (tmp = dinic(st, INF))
ans += tmp;
}
}
int main()
{
sf(T);
for (LL cas = ; cas <= T; cas++)
{
sf(n), sf(m), sf(l);
for (LL i = ; i <= n; i++)
{
sf(p[i].pay), sf(p[i].time);
p[i].id = i;
}
for (LL i = ; i <= m; i++)
{
sf(s[i].pro);
sf(s[i].cnt);
s[i].time = ;
for (LL j = ; j < s[i].cnt; j++)
{
sf(s[i].pl[j]);
s[i].time = max(s[i].time, p[s[i].pl[j]].time);
}
}
sort(p + , p + + n);
bool f = false;
st = n + m + , ed = st + ;
printf("Case #%lld: ", cas);
for (LL i = ; i <= n; i++)
{
memset(g, , sizeof(g));
for (LL j = ; j <= i; j++)
g[p[j].id][ed] = p[j].pay;
LL tot = ;
for (LL j = ; j <= m; j++)
{
if (s[j].time <= p[i].time)
{
tot += s[j].pro;
g[st][j + n] = s[j].pro;
for (LL k = ; k < s[j].cnt; k++)
g[j + n][s[j].pl[k]] = INF;
}
}
solve();
ans = tot - ans;
if (ans >= l)
{
printf("%lld %lld\n", p[i].time, ans);
f = true;
break;
}
}
if (!f)
printf("impossible\n");
}
}
Less Time, More profit 最大权闭合子图(最大流最小割)的更多相关文章
- HDU 5855 Less Time, More profit 最大权闭合子图
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5855 Less Time, More profit Time Limit: 2000/1000 MS ...
- 【最大权闭合子图 最小割】bzoj1497: [NOI2006]最大获利
最大权闭合子图的模型:今天才发现dinic板子是一直挂的…… Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在 ...
- 洛谷 P4174 [NOI2006]最大获利 && 洛谷 P2762 太空飞行计划问题 (最大权闭合子图 && 最小割输出任意一组方案)
https://www.luogu.org/problemnew/show/P4174 最大权闭合子图的模板 每个通讯站建一个点,点权为-Pi:每个用户建一个点,点权为Ci,分别向Ai和Bi对应的点连 ...
- bzoj 1497 [NOI2006]最大获利【最大权闭合子图+最小割】
不要被5s时限和50000点数吓倒!大胆网络流!我一个5w级别的dinic只跑了1s+! 看起来没有最大权闭合子图的特征--限制,实际上还是有的. 我们需要把中转站看成负权点,把p看成点权,把客户看成 ...
- 洛谷 P2762 太空飞行计划问题 【最大权闭合子图+最小割】
--一道难在读入的题. 最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了. 然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的 ...
- BZOJ 1565 / P2805 [NOI2009]植物大战僵尸 (最大权闭合子图 最小割)
题意 自己看吧 BZOJ传送门 分析 - 这道题其实就是一些点,存在一些二元限制条件,即如果要选uuu则必须选vvv.求得到的权值最大是多少. 建一个图,如果选uuu必须选vvv,则uuu向vvv连边 ...
- 【最大权闭合子图/最小割】BZOJ3438-小M的作物【待填】
[题目大意] 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植 ...
- HDU5855 Less Time, More profit(最大权闭合子图)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5855 Description The city planners plan to build ...
- 2018.11.06 NOIP训练 最大获利(profit)(01分数规划+最大权闭合子图)
传送门 好题啊. ∑i<jpi,jK∗(200−K)>X\frac{\sum_{i<j}p_{i,j}}{K*(200-K)}>XK∗(200−K)∑i<jpi,j ...
随机推荐
- Redis和SpringDataRedis
一.Redis简介 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,运行在内存中,由ANSI C编写.企业开发通常采用Redis来实现缓存.同类的产品还有memcac ...
- C#过时方法标记
1.当遇到过时或废弃的方式 函数怎么办 [Obsolete]特性解决你的困惑 1.1:当方法已经完成相关兼容 可以保留时
- mysql 修改 root 密码
5.76中加了一些passwd的策略 MySQL's validate_password plugin is installed by default. This will require that ...
- APK瘦身-是时候给App进行减负了
前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装.前一段时间我司某一App进行APK的瘦身,最终也达到了减小10M的目标,现做一个简单的总结记录. ...
- iOS游戏开发之UIDynamic
iOS游戏开发之UIDynamic 简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 ...
- VUE 入坑系列 一 基础语法
html代码 <div id="app"> {{message}} </div> JavaScript代码 var vm = new Vue({ el: & ...
- CentOS 6.4 linux下编译安装 LNMP环境
1.nginx编译安装 2.PHP编译安装 3.mysql编译安装 4.NGINX配置模板 5.CentOS 6.4 php-fpm 添加service 添加平滑启动/重启
- windows下管理ubuntu服务器以及切换root身份
远程连接Linux云服务器-命令行模式 1.远程连接工具.目前Linux远程连接工具有很多种,您可以选择顺手的工具使用.下面使用的是名为Putty(putty.rar)的Linux远程连接工具.该工具 ...
- Record these plug-ins of vscode
实在无聊透顶.写个随笔记录一下vscode的插件好了. 第一次使用(之前一直在用sublime...),以后再更新吧.record my color too! Visual Studio Code B ...
- AIX RAC 安装失败完全卸载
1,删除软件安装目录 rm -rf /u01/app 2,删除以下目录内容 rm -rf/tmp/.oracle rm -rf/tmp/* rm -rf/tmp/ora* rm -rf/var/tmp ...