poj 1149
#include <cstdio>
#include <cstring>
#include <queue>
#define _clr(x, y) memset(x, y, sizeof(x))
#define Min(x, y) (x < y ? x : y)
#define INF 0x3f3f3f3f
#define N 150
#define M 1005
using namespace std; int resi[N][N], h[N], ef[N];
int dist[N], pre[N];
int Maxf, S, T;
bool used[N];
queue<int> Q; // 一般预流推进算法 --47ms
void Push(int x)
{
for(int i=; i<=T; i++)
{
int tmp = Min(ef[x], resi[x][i]);
if(tmp> && (x==S || h[x]==h[i]+))
{
resi[x][i] -= tmp, resi[i][x] += tmp;
ef[x] -= tmp, ef[i] += tmp;
if(i==T) Maxf += tmp;
if(i!=S && i!=T) Q.push(i);
}
}
} void Push_Relabel(int n)
{
Maxf = ;
_clr(ef, );
_clr(h, );
h[S] = n, ef[S]=INF, ef[T]=-INF;
Q.push(S);
while(!Q.empty())
{
int x = Q.front();
Q.pop();
Push(x);
if(x!=S && x!=T && ef[x]>)
{
h[x]++;
Q.push(x);
}
}
printf("%d\n",Maxf);
} void Init(int m, int n)
{
int pig[M], last[M];
int num, k;
S=, T=n+;
_clr(last, );
_clr(resi, );
for(int i=; i<=m; i++)
scanf("%d", pig+i);
for(int i=; i<=n; i++)
{
scanf("%d", &num);
for(int j=; j<num; j++)
{
scanf("%d", &k);
if(last[k]==)
resi[S][i] += pig[k];
else
resi[last[k]][i] = INF;
last[k] = i;
}
scanf("%d", resi[i]+T);
}
} // 连续最短曾广路算法 --17ms
bool bfs_dinic()
{
_clr(dist, -);
dist[S] = ;
Q.push(S);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
for(int i=; i<=T; i++)
{
if(dist[i]< && resi[u][i])
{
dist[i] = dist[u]+;
Q.push(i);
}
}
}
return dist[T]> ? : ;
} int dfs(int x, int f)
{
int a=;
if(x==T) return f;
for(int i=; i<=T; i++)
{
if(resi[x][i] && dist[i]==dist[x]+ && (a=dfs(i, Min(f, resi[x][i]))))
{
resi[x][i] -= a, resi[i][x] += a;
return a;
}
}
return ;
} void Dinic()
{
int ans=, a;
while(bfs_dinic())
while(a=dfs(, INF)) ans+= a;
printf("%d\n", ans);
} // EK算法 --0ms
bool bfs()
{
_clr(used, );
_clr(pre, -);
int Sta[N], top=;
used[S] = true;
Sta[top++] = S;
while(top)
{
int u = Sta[--top];
for(int i=; i<=T; i++)
{
if(resi[u][i] && !used[i])
{
used[i] = true;
pre[i] = u;
if(i==T) return true;
Sta[top++] = i;
}
}
}
return false;
}
void EK()
{
int maxf=, d;
while(bfs())
{
d = INF;
for(int i=T; i!=S; i=pre[i])
d = Min(d, resi[pre[i]][i]);
for(int i=T; i!=S; i=pre[i])
{
resi[pre[i]][i] -= d;
resi[i][pre[i]] += d;
}
maxf += d;
}
printf("%d\n", maxf);
}
int main()
{
int n, m;
while(~scanf("%d%d", &m, &n))
{
while(!Q.empty()) Q.pop();
Init(m, n);
EK();
//Push_Relabel(n);
//Dinic();
}
return ;
}
poj 1149的更多相关文章
- poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新
题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...
- AC日记——pigs poj 1149
POJ - 1149 思路: 最大流: 代码: #include <cstdio> #include <cstring> #include <iostream> # ...
- POJ 1149 PIGS(Dinic最大流)
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20738 Accepted: 9481 Description ...
- 网络流 A - PIGS POJ - 1149 最大流
A - PIGS POJ - 1149 这个题目我开始感觉很难,然后去看了一份题解,写的很好 https://wenku.baidu.com/view/0ad00abec77da26925c5b01c ...
- poj 1149 最大流
题目链接:http://poj.org/problem?id=1149 #include <cstdio> #include <cmath> #include <algo ...
- 网络流相关知识点以及题目//POJ1273 POJ 3436 POJ2112 POJ 1149
首先来认识一下网络流中最大流的问题 给定一个有向图G=(V,E),把图中的边看做成管道,边权看做成每根管道能通过的最大流量(容量),给定源点s和汇点t,在源点有一个水源,在汇点有一个蓄水池,问s-t的 ...
- POJ 1149 PIGS
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20579 Accepted: 9387 Description ...
- POJ 1149 PIGS 【网络流】
题意: m n //有m个猪圈,n个人卖猪. a1...am //编号为i的猪圈里有ai头猪. b1 c1...cb1 d1 //第i个人有bi把钥匙,分别是ci猪圈的,其它猪圈里的猪都 ...
- POJ 1149 PIGS ★(经典网络流构图)
[题意] 有M个猪圈,每个猪圈里初始时有若干头猪.一开始所有猪圈都是关闭的.依 次来了N个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪.每 个顾客分别都有他能够买的数量的上限.每个顾客走后, ...
- poj 1149 PIGS【最大流经典建图】
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18727 Accepted: 8508 Description ...
随机推荐
- 扩展vbox硬盘大小
1.使用VboxManage list hdds查看所有安装的虚拟机信息 2.找到你要扩展硬盘容量虚拟机的UUID,使用modifyhd命令扩展硬盘大小 VBoxManage modifyhd U ...
- awk的接口实现方案1
module/a.awk function sum(a, b) { return a + b } module/b.awk function sum(a, b) { return a * b } ma ...
- #define XBYTE ((unsigned char volatile xdata *) 0)
今天在看别人的CAN总线程序的时候,突然发现了这么一句宏定义:#define XBYTE ((unsigned char volatile xdata *) 0),以前都没注意到过.后来查了一下,发现 ...
- VirtualBox修改虚拟盘路径
VirtualBox虚拟盘路径默认是存在C盘的,而当我们发现C盘不够用的时候,想转移就感觉有点麻烦了,现在给大家介绍一个简单又使用的方法. 第一步:到默认目录C:\Users\Administrato ...
- C之函数指针
这方面的技能,在观察系统调用时,是很需要的. 但我不是很熟悉,另外,要再会函数指针数组的话,那就更强啦~~ 按<HEAD FIRST C>作了个样例: cat find.c #includ ...
- jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动
jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 http://www.17sucai.com/pins/demoshow/382
- 3 Sum Closest 解答
Question Given an array S of n integers, find three integers in S such that the sum is closest to a ...
- Activity的onSaveInstanceState()和onRestoreInstanceState()方法
首先Android的Activity生命周期如下图: Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,他们不同于onC ...
- jsp页面判断文件上传类型
<script language="javascript" type="text/javascript"> function check_file( ...
- iOS程序员对算法的要求
算法和数据结构(鉴于二者的关联,以下统称算法),对于程序员的重要性一直是个具有争议性的话题.有一些程序员内心对算法有着天然的排斥,面试当中一旦考察算法知识,会被不少程序员吐槽,但有部分公司又一直在坚持 ...