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并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位 ...
随机推荐
- shuffle过程中的信息传递
依据Spark1.4版 Spark中的shuffle大概是这么个过程:map端把map输出写成本地文件,reduce端去读取这些文件,然后执行reduce操作. 那么,问题来了: reducer是怎么 ...
- firefly 框架 结构图
原地址:http://www.9miao.com/question-15-54838.html 系统结构:
- 如何在eclipse里使用git
新版都自带git插件了.在项目上右键,选team,选share project,再选择git就可以了. 如果在本地使用git比较简单.如果要多人共享的使用git,那么需要专门的服务器,并提供ssh,这 ...
- ****JFinal 部署在 Tomcat 下推荐方法
首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任何差别.Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免 经常有人 ...
- c缺陷与陷阱笔记-第四章 连接
1.变量的声明. 在不同的源文件中,应该是1个定义+多个声明的形式存在的,并且声明的类型和定义的类型要一样,否则可能会报错. 声明 : extern 类型 变量名 声明并定义: extern 类型 变 ...
- 多线程 (四)GCD
学习GCD要掌握几个概念 任务:需要执行的代码块可以看作一个任务 队列:把任务放到队列里,遵循先进先出的原则 队列又分为串行队列和并行队列 串行队列:顺序执行 并发队列:同时执行多个任务 同步:在当前 ...
- CentOS7.1配置远程桌面
网上看了很多资料,完全是乱的. 我使用的是CentOS7.1的系统.我的要求是windows的客户机可以远程访问CentOS系统. 1,首先需要检查一下服务器是否已经安装了VNC服务,检查服务器的是否 ...
- live555源码研究(四)------UserAuthenticationDatabase类
一.UserAuthenticationDatabase类作用 1,用户/密码管理 2,鉴权管理 二.类UserAuthenticationDatabase继承关系图 ...
- 【转】notepad++ 应用学习 -- 列模式,十六进制模式
Notepad++ 顾名思义,是一个比notepad(Windows下叫记事本)的功能更强的编辑器. 总以为notepad++小巧轻盈,而且开源,要比UE(UltraEdit)好用.因为她支持的视 ...
- HeadFirst设计模式之迭代器模式
一. 1.迭代器模式是对遍历集合元素的抽象 2.The Iterator Pattern provides a way to access the elements of an aggregate o ...