poj1149
非常好的网络流
每个顾客分别用一个结点来表示。
对于每个猪圈的第一个顾客,从源点向他连一条边,容量就是该猪圈里的猪的初始数量
对于每个猪圈,假设有n个顾客打开过它,则对所有整数i∈[1, n),从该猪圈的第i个顾客向第i + 1个顾客连一条边,容量为无穷。
从各个顾客到汇点各有一条边,容量是各个顾客能买的数量上限。
其实很好理解
const inf=;
type node=record
from,point,flow,next:longint;
end;
var p,s,w,h,numh,cur,pre:array[..] of longint;
v:array[..] of boolean;
a:array[..,..] of longint;
edge:array[..] of node;
ans,z,len,t,i,j,k,x,y,n,m:longint; procedure add(x,y,f:longint);
begin
inc(len);
edge[len].from:=x;
edge[len].point:=y;
edge[len].flow:=f;
edge[len].next:=p[x];
p[x]:=len;
end; procedure sap;
var q,u,i,j,flow,neck,tmp:longint;
begin
fillchar(numh,sizeof(numh),);
fillchar(h,sizeof(h),);
fillchar(pre,sizeof(pre),);
numh[]:=t+;
u:=;
while h[]<t+ do
begin
if u=t then
begin
neck:=;
flow:=inf;
i:=;
j:=cur[i];
while i<>t do
begin
if flow>edge[j].flow then
begin
flow:=edge[j].flow;
neck:=i;
end;
i:=edge[j].point;
j:=cur[i];
end;
i:=;
j:=cur[i];
while i<>t do
begin
dec(edge[j].flow,flow);
inc(edge[j xor ].flow,flow);
i:=edge[j].point;
j:=cur[i];
end;
ans:=ans+flow;
u:=neck;
end;
q:=-;
i:=p[u];
while i<>- do
begin
x:=edge[i].point;
if (edge[i].flow>) and (h[u]=h[x]+) then
begin
q:=i;
break;
end;
i:=edge[i].next;
end;
if q<>- then
begin
cur[u]:=q;
pre[x]:=u;
u:=x;
end
else begin
dec(numh[h[u]]);
if numh[h[u]]= then break;
tmp:=t+;
i:=p[u];
while i<>- do
begin
x:=edge[i].point;
if (edge[i].flow>) then tmp:=min(tmp,h[x]);
i:=edge[i].next;
end;
h[u]:=tmp+;
inc(numh[h[u]]);
if u<> then u:=pre[u];
end;
end;
end; begin
readln(m,n);
fillchar(p,sizeof(p),);
len:=-;
t:=n+;
for i:= to m do
read(w[i]);
for i:= to n do
begin
read(y);
z:=;
for j:= to y do
begin
read(x);
if v[x]=false then
begin
v[x]:=true;
z:=z+w[x]; //如果多条边连接源点和顾客,那么合并
end;
inc(s[x]);
a[x,s[x]]:=i;
end;
if z<> then
begin
add(,i,z);
add(i,,);
end;
readln(x);
add(i,t,x);
add(t,i,);
end;
for i:= to m do
for j:= to s[i]- do
for k:=j+ to s[i] do
begin
add(a[i,j],a[i,k],inf);
add(a[i,k],a[i,j],);
end;
sap;
writeln(ans);
end.
poj1149的更多相关文章
- POJ1149 PIGS
想了好久啊...(#-.-) 开始想到m*n个点的构图,明显超时,于是考虑压缩节点个数 我们发现每个猪圈最后被有且只有一个人调整,于是想到对于一个人,连接他能调整的每个猪圈的上一个控制人.(不懂可以开 ...
- POJ-1149 PIGS---最大流+建图
题目链接: https://vjudge.net/problem/POJ-1149 题目大意: M个猪圈,N个顾客,每个顾客有一些的猪圈的钥匙,只能购买这些有钥匙的猪圈里的猪,而且要买一定数量的猪,每 ...
- [BZOJ1280][POJ1149]Emmy卖猪pigs
[BZOJ1280][POJ1149]Emmy卖猪pigs 试题描述 Emmy在一个养猪场工作.这个养猪场有 \(M\) 个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位 ...
- 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构图题
引题解: 这道题目的大意是这样的:⦁ 有 M 个猪圈(M ≤ 1000),每个猪圈里初始时有若干头猪.⦁ 一开始所有猪圈都是关闭的.⦁ 依次来了 N 个顾客(N ≤ 100),每个顾客分别会打开指定 ...
- POJ1149(最大流)
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21678 Accepted: 9911 Description ...
随机推荐
- Cassandra1.2文档学习(18)—— CQL数据模型(下)
三.集合列 CQL 3 引入了一下集合类型: •set •list •map 在关系型数据库中,允许用户拥有多个email地址,你可以创建一个email_addresses表与users表存在一个多对 ...
- 使用node.js抓取有路网图书信息(原创)
之前写过使用python抓取有路网图书信息,见http://www.cnblogs.com/dyf6372/p/3529703.html. 最近想学习一下Node.js,所以想试试手,比较一下http ...
- http返回状态代码及含义
“100″ : Continue(继续) 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) “101″ : Switching Protocols(切换协议) 请求者已要求服 ...
- TDBAdvGrid 只读状态下复制功能
DataSource1.AutoEdit := false;
- Delphi Base64 编解码函数
Delphi 自带 Base64 编解码的单元, EncdDecd这个单元提供两套四个公开函数: 对流的编解码:procedure EncodeStream(Input, Output: TStrea ...
- LINQ to XML学习笔记
一.XML基础知识 1.XML:可扩展标记语言 Extensible Markup Language ,提供了一种保存数据的格式,数据可以通过这种格式很容易地在不同的应用程序之间实现共享. 2.使用X ...
- C#写的SQL聚合函数
SQL Server 字符串连接聚合函数. 注册程序集: 拷贝“SqlStrConcate.dll”至<sql安装根目录>/MSSQL.1/MSSQL/Binn目录下,执行下面的SQL: ...
- QR code 金庸小说体(二)
传说 在二维码世纪,流传着这样一个传说,long long ago,武林一片混乱,这时魔教二长老创立了一门绝世武功——QR code,随后称霸武林.但同时也遭到武林中人的觊觎和反抗,各大武林正派掌门人 ...
- 1053: [HAOI2007]反素数ant - BZOJ
Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数 ...
- jquery判断对象是否获得焦点
var isFocus=$("#tRow").is(":focus"); if(true==isFocus){ alert("focus") ...