【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 5 15
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

12

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

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <algorithm>
  4
  5 #define maxn 510
  6 #define R register
  7 #define inf 0x7fffffff
  8 #define dmin(_a, _b) ((_a) < (_b) ? (_a) : (_b))
  9 int id2[maxn], id3[maxn], tot, num[maxn][maxn];
 10 int s, t, ans, deg[maxn << 2];
 11 bool req[maxn][maxn];
 12 struct Edge {
 13     Edge *next, *rev;
 14     int to, cap;
 15 } *cur[maxn << 2], *last[maxn << 2], e[maxn * maxn << 2], *ecnt = e;
 16 inline void link(R int a, R int b, R int w)
 17 {
 18     *++ecnt = (Edge) {last[a], ecnt + 1, b, w}; last[a] = ecnt;
 19     *++ecnt = (Edge) {last[b], ecnt - 1, a, 0}; last[b] = ecnt;
 20 }
 21 int q[maxn << 2], dep[maxn << 2];
 22 inline bool bfs()
 23 {
 24     memset(dep, -1, (t + 1) << 2);
 25     R int head = 0, tail = 1; dep[q[1] = t] = 0;
 26     while (head < tail)
 27     {
 28         R int now = q[++head];
 29         for (R Edge *iter = last[now]; iter; iter = iter -> next)
 30             if (iter -> rev -> cap && dep[iter -> to] == -1)
 31                 dep[q[++tail] = iter -> to] = dep[now] + 1;
 32     }
 33     return dep[s] != -1;
 34 }
 35 int dfs(R int x, R int f)
 36 {
 37     if (x == t) return f;
 38     R int used = 0;
 39     for (R Edge* &iter = cur[x]; iter; iter = iter -> next)
 40         if (iter -> cap && dep[iter -> to] + 1 == dep[x])
 41         {
 42             R int v = dfs(iter -> to, dmin(f - used, iter -> cap));
 43             iter -> cap -= v;
 44             iter -> rev -> cap += v;
 45             used += v;
 46             if (f == used) return f;
 47         }
 48     return used;
 49 }
 50 void dinic()
 51 {
 52     while (bfs())
 53     {
 54         memcpy(cur, last, sizeof last);
 55         ans += dfs(s, inf);
 56     }
 57 }
 58 int main()
 59 {
 60     R int n, m, k; tot = 1; scanf("%d%d%d", &n, &m, &k); link(s, 1, k);
 61     for (R int i = 1; i <= m; ++i) id3[i] = ++tot;
 62     for (R int i = 1; i <= n; ++i)
 63     {
 64         R int c; scanf("%d", &c);
 65         id2[i] = ++tot;
 66         for (R int j = 1; j <= c; ++j)
 67         {
 68             R int x; scanf("%d", &x);
 69             ++num[i][x];
 70         }
 71     }
 72     R int F; scanf("%d", &F);
 73     for (R int i = 1; i <= F; ++i)
 74     {
 75         R int a, b; scanf("%d%d", &a, &b); req[a][b] = 1;
 76     }
 77     t = ++tot;
 78     for (R int i = 1; i <= m; ++i)
 79     {
 80         R int a; scanf("%d", &a);
 81         link(id3[i], t, a);
 82     }
 83     for (R int i = 1; i <= n; ++i)
 84     {
 85         R int p, l; scanf("%d%d", &p, &l);
 86         link(1, id2[i], p - l); deg[1] += l; deg[id2[i]] -= l;
 87     }
 88     for (R int i = 1; i <= n; ++i)
 89         for (R int j = 1; j <= m; ++j)
 90             if (req[i][j])
 91             {
 92                 link(id2[i], id3[j], num[i][j] - 1);
 93                 ++deg[id2[i]]; --deg[id3[j]];
 94             }
 95             else if (num[i][j]) link(id2[i], id3[j], num[i][j]);
 96     R int os = s, ot = t; link(t, s, inf);
 97     s = ++tot; t = ++tot;
 98     for (R int i = 1; i <= tot; ++i) deg[i] > 0 ? link(i, t, deg[i]) : link(s, i, -deg[i]);
 99     dinic();
100     s = os; t = ot; ans = 0;
101     dinic();
102     printf("%d\n", ans);
103     return 0;
104 }
时间: 2024-07-30 23:38:44

【BZOJ2409】 地下车会的相关文章

18岁女生公交上被猥亵 拍下猥琐男样貌并踹下车

公交车上威胁女孩被拍照并被踹下车,警方按图抓获嫌疑人. 7月21日下午,在沈阳市239路公交车上发生一起一女孩被一男子骚扰案件.沈阳警方接到报警后,立即组织相关部门开展调查,于7月27日中午将涉嫌骚扰他人的王某某(男,37岁,沈阳市铁西区人)查获.公安机关正依法对其进行审查. 沈阳18岁的女学生小艾(化名)是事件的受害人.就在公交车里,她被一名男子骚扰,她反转镜头,拍下了猥琐男.然后一脚踹向猥琐男的后腰,正巧车门打开,猥琐男被一脚踹了下去…… 小艾还是学生,目前正放暑假.当时她在工业展览馆站上了

电动自行车如何过马路?规定:下车推行!

电动自行车如何过马路?规定:下车推行! 来源: 嵊州新闻网 作者: 记者 陈链芳 通讯员 丁旭东 2014年11月04日08:42:14 前几天,私家车主小王碰到了一件让他后怕的事:在市区一信号灯路口,绿灯亮起,小王正常启动车子,缓慢前行,不防此时却突然出现一辆电动自行车(本地俗称电瓶车),小王急踩刹车却为时已晚,车子右前方和这辆电动自行车相撞了.虽然车速不快,但事故损失也不小.对此,小王郁闷了很久,这已经是自己第二次跟电动自行车相撞了,真是防不胜防. 记者就此事故采访了交警部门.交警部门的回答

刚下车v公司电话

http://steamcommunity.com/id/UR36KKmgbOkd/ http://steamcommunity.com/id/aI1E3Puwthhw/ http://steamcommunity.com/id/53jIBwCswlzk/ http://steamcommunity.com/id/t8tmdDr6ygIl/ http://steamcommunity.com/id/cPOQBxla0soW/ http://steamcommunity.com/id/9Rnf4i

比特币下车, 区块链不死: 资本下一站, 请关注这些公司

ICO被封杀,比特币也就随之被普遍认为是"死了".问题是下一步会怎样?不管市场如何变化,资本是永远不会"死"的.在这个流动性早就严重过剩的时代,人们实际上关心的并不是哪个项目的死与活,而是资本将会往哪个方向流动?这才是最具本质性的问题. 这些年来随着比特币的炒作,多数人似懂非懂地都知道了另一个词:区块链.甚至有不少人以为比特币就是区块链,而区块链也就是比特币本身.比特币死了,区块链是不是也跟着死了?笔者的意见是区块链不会死. A. 区块链不是比特币,而是一种新兴的技

Windows下MySQL下载安装、配置与使用

用过MySQL之后,不论容量的话,发现比其他两个(sql server .oracle)好用的多,一下子就喜欢上了.下面给那些还不知道怎么弄的童鞋们写下具体的方法步骤. (我这个写得有点太详细了,甚至有些繁琐,有很多步骤在其他的教程文档里都是省略掉的,但我还是要写出来,因为我当时走了很多弯路,我希望你们能够避免我走的这些弯路.当然,知道同学的可以略过,选择你想知道的地方看) 第一大步:下载.(不需要注册也可以下载,直接点下面的no thanks) a.俗话说:“巧妇难为无米之炊”嘛!我这里用的是

微信小程序 --01

微信小程序开发基础 -- 开发前的准备 缘由 1月9日张小龙微信小程序正式上线,因为微信,所以小程序从诞生开始就头戴巨大的光环,很多的团队,公司以及开发的个体都眼巴巴的盯着这个小程序.而那个时候我却在全力以赴的研究node,所以也没有仔细的研究这个风风火火的小程序.本以为此生无甚交集,但是最近公司却准备开发小程序,而我也"幸运"的被选中...... 小程序上线有有一段时间了,虽然还是在不断的更新,但是却大体趋于稳定,网上也积累了一定的教程和帖子,所以在研究了一下之后也就决定将自己学习小

[BZOJ2388]旅行规划

试题描述 OIVillage是一个风景秀美的乡村,为了更好的利用当地的旅游资源,吸引游客,推动经济发展,xkszltl决定修建了一条铁路将当地n个最著名的经典连接起来,让游客可以通过火车从铁路起点(1号景点)出发,依次游览每个景区.为了更好的评价这条铁路,xkszltl为每一个景区都哦赋予了一个美观度,而一条旅行路径的价值就是它所经过的景区的美观度之和.不过,随着天气与季节的变化,某些景点的美观度也会发生变化. xkszltl希望为每位旅客提供最佳的旅行指导,但是由于游客的时间有限,不一定能游览

Java面試題(实用性高)

3.Spring MVC中的注解你都用过哪些,SpringMVC的运行原理是什么? @Controller:使其普通的java类充当控制层的作用. @RequestMapping:有两个参数 url 代表要访问的路径 method请求方式 @Service::使其java类充当service层. @Repository::使其java类充当持久层. @Resource:默认按照名字注入指定的bean. @Autowired:默认按照类型进行注入可以结合@Qualifier("bean的的名字 名

学习编程让我成功减肥!

路过楼下药店,门口有个称,称了下体重,惊喜地发现体重跟大半年前相比,减轻了十来斤. 欣喜之余,梳理了一下,发现能够成功减肥,跟学习编程有密不可分的关系.总结如下: 1, 学习编程帮助减肥 学习编程,免不了要熬夜. 一熬夜,就上火. 朋友说,得管住嘴,不吃油腻食物. 好呢,自此天天白灼上海青,戒掉了最爱的猪脚肉. 2, 学习编程,让我学会了合理安排饮食 炒菜不放油,尽量以蒸菜为主. 白灼最有效,水烧开后,上海青扔进锅,烫熟后吃,原汁原味,各种维生素基本上保留无余. 3, 学习编程,让我爱上了锻炼身