【BZOJ2409】 地下车会
Description
小Y喜欢速度与激情,于是他参加了地下车会。 地下车会设有N 个
分赛区,M种赛事。每个分赛区有C[i]场比赛。由于地下车会经营者
想要赚到更多的钱,规定小 Y 必须参加某一些赛区的一些赛事。且
每个赛区至少参加L[i]场比赛。小Y不想在一个地区逗留太久惹上麻
烦,所以每个赛区他最多参加P[i]场比赛。可能是因为经营者对新手
有歧视心理,规定了小 Y 每种赛事最多只能进行 A[i]场比赛。小 Y
这个月资金有点紧张,他算了算自己最多只能够维护车子跑 K 场比
赛。由于小 Y 是新手,所以他希望积累更多的经验,也就是跑尽可
能多的赛事。
Input
第一行三个数N,M,K,用空格隔开。
接下来N行,每行第一个数C[i],接下来 C[i]个数,代表每场比赛的
种类,种类可能重复。
接下来一行一个数F,代表规定条数。
接下来 F 行,每行两个数 A,B,代表小 Y 必须参加 A 赛区的 B 种
赛事一次及以上。一种规定只会出现一次。
接下来一行M个数,代表A[i]。
接下来N行,每行两个数P[i],L[i]。
Output
第一行一个数ans,表示小Y最多能跑几场赛事。
Sample Input
5 1 1 2 2 3
6 2 2 3 4 5 5
3 1 2 3
6 1 2 3 4 5 5
4 3 3 4 4
3
1 2
2 5
5 3
2 2 3 2 3
4 2
4 2
2 1
5 3
3 1
Sample Output
HINT
前 100% 的数据, 1<=N<=500 , 1<=M<=500 , 1<=C[i]<=500 ,
1<=F<=100000
【友情提示】
对于所有的数据, 1<=L[i]<=P[i]<=C[i], 1<=A[i]<=10^4, K<= 200000,
数据保证合法。
Solution
依题意构图,跑上下界最大流。
Code
#include <cstdio>
#include <cstring>
#include <algorithm> #define maxn 510
#define R register
#define inf 0x7fffffff
#define dmin(_a, _b) ((_a) < (_b) ? (_a) : (_b))
int id2[maxn], id3[maxn], tot, num[maxn][maxn];
int s, t, ans, deg[maxn << ];
bool req[maxn][maxn];
struct Edge {
Edge *next, *rev;
int to, cap;
} *cur[maxn << ], *last[maxn << ], e[maxn * maxn << ], *ecnt = e;
inline void link(R int a, R int b, R int w)
{
*++ecnt = (Edge) {last[a], ecnt + , b, w}; last[a] = ecnt;
*++ecnt = (Edge) {last[b], ecnt - , a, }; last[b] = ecnt;
}
int q[maxn << ], dep[maxn << ];
inline bool bfs()
{
memset(dep, -, (t + ) << );
R int head = , tail = ; dep[q[] = t] = ;
while (head < tail)
{
R int now = q[++head];
for (R Edge *iter = last[now]; iter; iter = iter -> next)
if (iter -> rev -> cap && dep[iter -> to] == -)
dep[q[++tail] = iter -> to] = dep[now] + ;
}
return dep[s] != -;
}
int dfs(R int x, R int f)
{
if (x == t) return f;
R int used = ;
for (R Edge* &iter = cur[x]; iter; iter = iter -> next)
if (iter -> cap && dep[iter -> to] + == dep[x])
{
R int v = dfs(iter -> to, dmin(f - used, iter -> cap));
iter -> cap -= v;
iter -> rev -> cap += v;
used += v;
if (f == used) return f;
}
return used;
}
void dinic()
{
while (bfs())
{
memcpy(cur, last, sizeof last);
ans += dfs(s, inf);
}
}
int main()
{
R int n, m, k; tot = ; scanf("%d%d%d", &n, &m, &k); link(s, , k);
for (R int i = ; i <= m; ++i) id3[i] = ++tot;
for (R int i = ; i <= n; ++i)
{
R int c; scanf("%d", &c);
id2[i] = ++tot;
for (R int j = ; j <= c; ++j)
{
R int x; scanf("%d", &x);
++num[i][x];
}
}
R int F; scanf("%d", &F);
for (R int i = ; i <= F; ++i)
{
R int a, b; scanf("%d%d", &a, &b); req[a][b] = ;
}
t = ++tot;
for (R int i = ; i <= m; ++i)
{
R int a; scanf("%d", &a);
link(id3[i], t, a);
}
for (R int i = ; i <= n; ++i)
{
R int p, l; scanf("%d%d", &p, &l);
link(, id2[i], p - l); deg[] += l; deg[id2[i]] -= l;
}
for (R int i = ; i <= n; ++i)
for (R int j = ; j <= m; ++j)
if (req[i][j])
{
link(id2[i], id3[j], num[i][j] - );
++deg[id2[i]]; --deg[id3[j]];
}
else if (num[i][j]) link(id2[i], id3[j], num[i][j]);
R int os = s, ot = t; link(t, s, inf);
s = ++tot; t = ++tot;
for (R int i = ; i <= tot; ++i) deg[i] > ? link(i, t, deg[i]) : link(s, i, -deg[i]);
dinic();
s = os; t = ot; ans = ;
dinic();
printf("%d\n", ans);
return ;
}
【BZOJ2409】 地下车会的更多相关文章
- 斐讯路由器L(联)B(壁)K-码兑换包安全下车通道(图文教程)
大家好,最近大家比较关心的斐讯路由器如何下车问题,楼主亲自试提取了一遍,记录下过程,欢迎大家一起讨论. 言归正传,上图,上图! No.1 打开斐讯提供的良心k码退换通道: https://tech-s ...
- Emergency Evacuation(最短下车时间)———(思维)
题意: 给你一个车厢和一些人的位置,这些人都坐在座位上,求这些人全部出去的时间最小值. 注意: 有许多行座位,且每行关于过道对称,出口在过道一端,一个时间只能移动一个单位,且每时刻每个格子只能有一人 ...
- 传播正能量——做一个快乐的程序员
引子 今天在博客园看到施瓦小辛格的文章我们搞开发的为什么会感觉到累,顿时有感而发.自己本来不擅长写文章,更不擅长写这种非技术性的文章,但是在思绪喷薄之际,还是止不住有很多话要说.针对从客观上说&quo ...
- 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波
注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...
- 站在风口,你或许就是那年薪20w+的程序猿
最近面试了一些人,也在群上跟一些群友聊起,发现现在的互联网真是热,一些工作才两三年的期望的薪资都是十几K的起,这真是让我们这些早几年就成为程序猿的情何以堪!正所谓是站在风口上,猪也能飞起来!我在这里就 ...
- thusc2016游记&&滚粗记&&酱油记
#include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/w ...
- 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...
- codevs 2287 火车站
2287 火车站 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 火车从始发站(称为第1站)开出,在始发站上车的人 ...
- php 远程本地化无后缀图片
$body = '<p style="margin: 0px 0px 1.1em; padding: 0px; color: rgb(51, 51, 51); font-family: ...
随机推荐
- 使用render函数渲染组件
使用render函数渲染组件:https://www.jianshu.com/p/27ec4467a66b
- MySQL on duplicate key update 批量插入并更新已存在数据
业务上经常存在一种现象,需要批量往表中插入多条数据,但在执行过程中,很可能因为唯一键冲突,而导致批量插入失败.因此需要事先判断哪些数据是重复的,哪些是新增的.比较常用的处理方法就是找出已存在的数据,并 ...
- Vue配置bs环境
安装插件 jQuery >: cnpm install jquery vue/cli 3 配置jQuery:在vue.config.js中配置(没有,手动项目根目录下新建) const webp ...
- JavaScript concat() 方法
昨天接触了一个项目,我的tbody变量是一个数组,然后数据返回的是数组里面包含对象,我刚开始没看懂这个concat的作用,然后百度一下javascript中的用法,以此记录concat的方法: dat ...
- 将div生成图片并下载下来
//文件需要引入html2canvas.js.jquery.js function downLoadImg(){ var element = $(".orgchart"); // ...
- MySQL下载~安装教程~这里示例 MySQL 8.0 Command Line Client
打开 https://www.mysql.com 也可以选择我分享的百度网盘文件 MySQL8.0.16.0 安装包 https://pan.baidu.com/s/1U8DkyJVp9Zvx7Zok ...
- jfinal layui easyexcel 实现文件的上传下载
jfinal layui easyexcel 这三样开源技术这里就不多介绍了,自行百度了解吧,他们的组合算是一个很高效又不失美观的操作体验. 操作主要分以下几步: 1.建立jfinal的操作环境, ...
- 2019-11-29-dotnet-core-输出调试信息到-DebugView-软件
title author date CreateTime categories dotnet core 输出调试信息到 DebugView 软件 lindexi 2019-11-29 10:14:3 ...
- (转) Windows下MySQL免安装版的下载与配置
本人在尊重原著的前提下.针对在实践中所遇到的问题加以整理和完善,如有不足之处,还请各位大神指点江山O(∩_∩)O~ 主要是因为平时自己学习时候会用到.及免安装版本的方便.对于个人开发者挺实用的! 安装 ...
- php set_magic_quotes_runtime() 函数过时解决方法
PHP5.3中 bool set_magic_quotes_runtime ( bool $new_setting )函数过时.把函数: set_magic_quotes_runtime($newse ...