POJ1149 PIGS
想了好久啊。。。(#-.-)
开始想到m*n个点的构图,明显超时,于是考虑压缩节点个数
我们发现每个猪圈最后被有且只有一个人调整,于是想到对于一个人,连接他能调整的每个猪圈的上一个控制人。(不懂可以开代码 (・(ェ)・) )
/**
* Problem:POJ1149
* Author:Shun Yao
* Time:2013.9.13
* Result:
* Memo:
*/ #include <cstring>
#include <cstdio> #define INF 0x7fffffff
#define MAXT 1111 long m, n, s, t, f[MAXT], p2[MAXT], h[MAXT], sum[MAXT]; class Edge {
public:
long v, f;
Edge *op, *next;
Edge() {}
~Edge() {}
Edge(long V, long F, Edge *o, Edge *ne) : v(V), f(F), op(o), next(ne) {}
} *g[MAXT], *now[MAXT], *p1[MAXT]; void add(long x, long y, long c) {
g[x] = new Edge(y, c, 0, g[x]);
g[y] = new Edge(x, 0, g[x], g[y]);
g[x]->op = g[y];
} long *l, *r, q[MAXT];
void SAP() {
static char f;
static Edge *e;
static long i, ans, ww, w;
memset(h, -1, sizeof h);
memset(sum, 0, sizeof sum);
l = r = q;
*r++ = t;
h[t] = 0;
sum[0] = 1;
while (l < r) {
for (e = g[*l]; e; e = e->next)
if (h[e->v] == -1) {
++sum[h[e->v] = h[*l] + 1];
*r++ = e->v;
}
++l;
}
for (i = 0; i <= t; ++i) {
now[i] = g[i];
p1[i] = 0;
p2[i] = -1;
}
i = s;
ans = 0;
while (h[s] <= t) {
f = 0;
for (e = now[i]; e; e = e->next)
if (e->f > 0 && h[i] == h[e->v] + 1) {
now[i] = e;
p1[e->v] = e;
p2[e->v] = i;
i = e->v;
if (i == t) {
ww = INF;
for (w = t; w != s; w = p2[w])
if (ww > p1[w]->f)
ww = p1[w]->f;
for (w = t; w != s; w = p2[w]) {
p1[w]->f -= ww;
p1[w]->op->f += ww;
}
ans += ww;
i = s;
}
f = 1;
break;
}
if (!f) {
ww = t + 1;
for (e = g[i]; e; e = e->next)
if (e->f > 0 && ww > h[e->v]) {
ww = h[e->v];
now[i] = e;
}
++sum[ww > t ? ww : ++ww];
if (!--sum[h[i]])
break;
h[i] = ww;
if (i != s)
i = p2[i];
}
}
printf("%ld", ans);
} int main() {
static long i, j, k, A, B; #ifndef ONLINE_JUDGE
freopen("poj1149.in", "r", stdin);
freopen("poj1149.out", "w", stdout);
#endif scanf("%ld%ld", &m, &n);
s = 0;
t = n + m + 1;
for (i = 1; i <= m; ++i) {
scanf("%ld", &A);
add(s, i, A);
f[i] = i;
}
for (i = 1; i <= n; ++i) {
scanf("%ld", &A);
for (j = 1; j <= A; ++j) {
scanf("%ld", &k);
add(f[k], i + m, INF);
f[k] = i + m;
}
scanf("%ld", &B);
add(i + m, t, B);
}
SAP(); fclose(stdin);
fclose(stdout);
return 0;
}
POJ1149 PIGS的更多相关文章
- POJ1149 PIGS 【最大流 + 构图】
题目链接:http://poj.org/problem?id=1149 PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- POJ1149 PIGS [最大流 建图]
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20662 Accepted: 9435 Description ...
- POJ1149 PIGS (网络流)
PIGS Time Limit: 1000MS M ...
- POJ1149 PIGS 【最大流量】
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16555 Accepted: 7416 Description ...
- poj1149 PIGS 最大流(神奇的建图)
一开始不看题解,建图出错了.后来发现是题目理解错了. if Mirko wants, he can redistribute the remaining pigs across the unlock ...
- 题解 POJ1149 Pigs
先翻译一下吧(题面可以在原OJ上找) Mirko在一个由M个锁着的猪舍组成的养猪场工作,Mirko无法解锁任何猪舍,因为他没有钥匙.客户纷纷来到农场.他们每个人都有一些猪舍的钥匙,并想购买一定数量的猪 ...
- POJ1149 PIGS(最大流)
题意: 有一个人,他有m个猪圈,每个猪圈里面有一定数量的猪,但是每个猪圈的门都是锁着的,他自己没有钥匙,只有顾客有钥匙,一天依次来了n个顾客,(记住是依次来的)他们每个人都有一些钥匙,和他 ...
- poj图论解题报告索引
最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman- ...
- [BZOJ1280][POJ1149]Emmy卖猪pigs
[BZOJ1280][POJ1149]Emmy卖猪pigs 试题描述 Emmy在一个养猪场工作.这个养猪场有 \(M\) 个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位 ...
随机推荐
- CodeForces 32C
额 找找规律吧 要用long long 才过. #include <cstdio> #include <algorithm> using namespace std; in ...
- 让wordpress投稿作者在后台只看到自己的文章
wordpress支持多作者撰写,让更多的人参与网站内容的创建是个不错的想法,UGC(User-generated content)使网站主题更丰富,不同的内容吸引不同的受众,一个好的网站应该多产生U ...
- 【形式化方法:VDM++系列】3.基于VDM++的图书管理系统需求定义
接前文:http://www.cnblogs.com/Kassadin/p/4091040.html 1.Before We Start: 在开始图书管理系统需求定义之前,需要先进行一些说明. 1.1 ...
- CyanogenMod刷机以及Google Play应用商店安装方法介绍
http://blog.csdn.net/zcynical/article/details/19241595 写在前面: 本文介绍的方法除第一步外,适用于所有CM系统支持的设备,第一步由于用到了PC上 ...
- hbase集群在启动的时候找不到JAVA_HOME的问题
hbase集群在启动的时候找不到JAVA_HOME的问题,启动集群的时候报错信息如下: root@master:/usr/local/hbase-/bin# ./start-hbase.sh star ...
- 生成整数自增ID(集群主键生成服务)
在集群的环境中,有这种场景 需要整数自增ID,这个整数要求一直自增,并且需要保证唯一性. Web服务器集群调用这个整数生成服务,然后根据各种规则,插入指定的数据库. 一般 ...
- 统计学习方法笔记--EM算法--三硬币例子补充
本文,意在说明<统计学习方法>第九章EM算法的三硬币例子,公式(9.5-9.6如何而来) 下面是(公式9.5-9.8)的说明, 本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流 ...
- [ffmpeg 扩展第三方库编译系列] frei0r mingw32 下编译问题
在编译安装frei0r的时候遇到两个错误地方, 两个都是在install的时候. 一开始编译都很顺利,输入了 make install之后就走开了,回来一看,报错误. 提示mkdir -p //usr ...
- 【转】The final local variable xxx cannot be assigned, since it is defined in an enclosing type
文地址:http://blog.163.com/benben_long/blog/static/199458243201481102257544/ 本文就自己编程时候遇到的一个问题,简要描述一下,并提 ...
- centos 搭建 darwin calendar 服务器
方法一(官网方法): useradd caluser ----为日历服务器建立一个新用户,方便管理 passwd caluser -----新用户更改密码 su caluser mkdir ~/Cal ...