The city planners plan to build N plants in the city which has M shops.

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 最大权闭合子图(最大流最小割)的更多相关文章

  1. HDU 5855 Less Time, More profit 最大权闭合子图

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5855 Less Time, More profit Time Limit: 2000/1000 MS ...

  2. 【最大权闭合子图 最小割】bzoj1497: [NOI2006]最大获利

    最大权闭合子图的模型:今天才发现dinic板子是一直挂的…… Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在 ...

  3. 洛谷 P4174 [NOI2006]最大获利 && 洛谷 P2762 太空飞行计划问题 (最大权闭合子图 && 最小割输出任意一组方案)

    https://www.luogu.org/problemnew/show/P4174 最大权闭合子图的模板 每个通讯站建一个点,点权为-Pi:每个用户建一个点,点权为Ci,分别向Ai和Bi对应的点连 ...

  4. bzoj 1497 [NOI2006]最大获利【最大权闭合子图+最小割】

    不要被5s时限和50000点数吓倒!大胆网络流!我一个5w级别的dinic只跑了1s+! 看起来没有最大权闭合子图的特征--限制,实际上还是有的. 我们需要把中转站看成负权点,把p看成点权,把客户看成 ...

  5. 洛谷 P2762 太空飞行计划问题 【最大权闭合子图+最小割】

    --一道难在读入的题. 最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了. 然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的 ...

  6. BZOJ 1565 / P2805 [NOI2009]植物大战僵尸 (最大权闭合子图 最小割)

    题意 自己看吧 BZOJ传送门 分析 - 这道题其实就是一些点,存在一些二元限制条件,即如果要选uuu则必须选vvv.求得到的权值最大是多少. 建一个图,如果选uuu必须选vvv,则uuu向vvv连边 ...

  7. 【最大权闭合子图/最小割】BZOJ3438-小M的作物【待填】

    [题目大意] 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植 ...

  8. HDU5855 Less Time, More profit(最大权闭合子图)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5855 Description The city planners plan to build ...

  9. 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<j​pi,j​​ ...

随机推荐

  1. Android开发中使用startActivityForResult()方法从Activity A跳转Activity B出现B退出时A也同时退出的解决办法

    最近一个 App 中用到了 startActivityForResult() 方法,使用的时候却出现了一些问题,比如我在 Activity A 中调用该方法向 Activity B 中跳转,如果 B  ...

  2. C#方法参数关键字

    一.params关键字 prams告诉函数的调用者,该函数的参数数量是可变,如果调用函数的参数标识了params关键字,那么我们可以使用逗号分割的参数或者一个数组来作为参数: 1.这里只能是数组,Li ...

  3. ButterKnife 在父类 点击事件没反应的解决方案

    在用继承的方式实现butterKnife的封装的时候遇到问题, butterKnife就在baseActivity中绑定的,但是父类中公共控件点击事件无效.找了半天原因,原来是子类和父类定义的点击方法 ...

  4. leetcode_Stone Game_dp_思维

    Alex和Lee玩游戏,共有偶数堆石头,石头总数为奇数,两人每次要么拿第一堆,要么拿最后一堆,两人以最优策略拿石堆(一次拿走完整的一堆),Alex先手,Alex赢返回True,否则返回False. 思 ...

  5. SpringBoot传参转换枚举

    有时候,我们传参的时候,希望使用枚举类来当作参数 public enum VipEnum { HUANG(1, "黄钻"), HONG(2, "红钻"); pr ...

  6. chmod - 改变文件的访问权限

    总揽 chmod [options] mode file... POSIX 选项: [-R] GNU 选项 (最短方式): [-cfvR] [--reference=rfile] [--help] [ ...

  7. h5编写帧动画

    var requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame; var ...

  8. CAD参数绘制块引用对象(com接口)

    主要用到函数说明: _DMxDrawX::DrawBlockReference 绘制块引用对象.详细说明如下: 参数 说明 DOUBLE dPosX 插入点的X坐标 DOUBLE dPosY 插入点的 ...

  9. C# 如何发送Http请求

    HttpSender是一个用于发送Http消息的轻量C#库,使用非常简单,只需要一两行代码,就能完成Http请求的发送 使用 Nuget,搜索 HttpSender 就能找到这个库 这个库的命名空间是 ...

  10. 【东软实训】SQL多表链接

    如果一个查询同时涉及两个以上的表,则称之为链接查询,链接查询是关系数据库中最主要的查询,主要包括等值链接查询.非等值链接查询.自身链接查询.外链接查询和复合条件链接查询. 这篇博文我们来对多表链接进行 ...