想了好久啊。。。(#-.-)

开始想到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的更多相关文章

  1. POJ1149 PIGS 【最大流 + 构图】

    题目链接:http://poj.org/problem?id=1149 PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  2. POJ1149 PIGS [最大流 建图]

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20662   Accepted: 9435 Description ...

  3. POJ1149 PIGS (网络流)

                                                                             PIGS Time Limit: 1000MS   M ...

  4. POJ1149 PIGS 【最大流量】

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16555   Accepted: 7416 Description ...

  5. poj1149 PIGS 最大流(神奇的建图)

    一开始不看题解,建图出错了.后来发现是题目理解错了.  if Mirko wants, he can redistribute the remaining pigs across the unlock ...

  6. 题解 POJ1149 Pigs

    先翻译一下吧(题面可以在原OJ上找) Mirko在一个由M个锁着的猪舍组成的养猪场工作,Mirko无法解锁任何猪舍,因为他没有钥匙.客户纷纷来到农场.他们每个人都有一些猪舍的钥匙,并想购买一定数量的猪 ...

  7. POJ1149 PIGS(最大流)

    题意:       有一个人,他有m个猪圈,每个猪圈里面有一定数量的猪,但是每个猪圈的门都是锁着的,他自己没有钥匙,只有顾客有钥匙,一天依次来了n个顾客,(记住是依次来的)他们每个人都有一些钥匙,和他 ...

  8. poj图论解题报告索引

    最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman- ...

  9. [BZOJ1280][POJ1149]Emmy卖猪pigs

    [BZOJ1280][POJ1149]Emmy卖猪pigs 试题描述 Emmy在一个养猪场工作.这个养猪场有 \(M\) 个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位 ...

随机推荐

  1. VC中不同类型DLL及区别

    1. DLL的概念可以向程序提供一些函数.变量或类. 静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式.静态链接库把最后的指令都包含在最终生成的EXE文件中了:动态链接库不 ...

  2. 关于用 MySQL 存储 Emoji

    http://www.v2ex.com/t/137724 如果你希望让你的网站或者 App 支持 Emoji,那么在初次设置 MySQL 时,有一些细节你需要知道. Emoji Emoji 字符的特殊 ...

  3. hibernate 数据行数统计 count(*)

    Hibernate关于sql中的count(*)数据统计: ①如果使用的是HQL: 直接在HQL中使用count(*)即可获取行数 Long count = (Long)HibernateUtil.g ...

  4. ASP.NET如何使用JSON

    关于json,有一个官网:http://www.json.org 上面介绍了每种语言生成json格式的类库,我们只要把他们下载解压之后调用他们其中的组件即可,在.net中我用的是Newtonsoft. ...

  5. [itint5]跳马问题加强版

    http://www.itint5.com/oj/#12 首先由跳马问题一,就是普通的日字型跳法,那么在无限棋盘上,任何点都是可达的.证法是先推出可以由(0,0)到(0,1),那么由对称型等可知任何点 ...

  6. Fibonacci sequence 求余数

    #include <iostream> using namespace std; int f(int n); int main() { int n; cin>>n; doubl ...

  7. WPF使用第三方的字体(TTF文件)

    一.准备好你要使用的字体文件,以TTF结尾的文件,然后复制到项目中,并设置Build Action(生成操作)为Resource(资源): 二.在App.xaml中或者你需要的地方添加资源的定义: & ...

  8. C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什

    C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什么?如果要学我该从何学起??? C# 框架看这里http://download.csdn.net/source/25784 ...

  9. 告诉你一个真实的OpenStack:都谁在用,用来干什么?

    告诉你一个真实的OpenStack:都谁在用,用来干什么? OpenStack基金会近日发布的双年调查报告显示,开源云计算软件OpenStack正在进入主流企业市场,但该项目依然面临较难部署和管理的老 ...

  10. 宏page_t

    /** Type of the index page */ typedef byte page_t;