题目链接:http://poj.org/problem?id=1149

题意中有一点要注意,否则构图就会有问题,每个顾客走后,被打开过的那些猪圈中的猪都可以被任意的调换到其他开着的猪圈中。

这里的构图不是单一的相邻,以及容量了,区别在于:他还要求这个容量,和连线。

这里的构图是,以顾客为节点,源点s,汇点t,源点到顾客的容量是:顾客所能得到的猪的和cap[s][i] += h[tmp];

但是,要是这里有一点要注意的是,顾客与顾客之间的容量,为无穷大,因为上一个顾客有多少,就能够给相邻顾客多少,这里,什么是相邻的顾客?

就是说,有公共钥匙的人啦!

老实说,这个构图,我一开始没有想到,也是借鉴了别人的哦,再加上了自己的理解。

#include <stdio.h>
#include <cstring>
#include <queue>
#include <algorithm> using namespace std; const int INF = 0x1f1f1f1f;
const int MAXN = ; int cap[MAXN][MAXN]; int EK(int s, int t) {
queue<int> q;
int flow[MAXN][MAXN];
int pre[MAXN];
int node[MAXN];
int maxflow=; int u,v; memset(flow, , sizeof(flow));
while(true) {
memset(node, , sizeof(node));
node[s] = INF;
q.push(s);
while(!q.empty()) {
u = q.front();
q.pop();
for(v = ; v <= t; ++v)
if(!node[v] && cap[u][v] > flow[u][v]) {
q.push(v);
node[v] = min(node[u],cap[u][v]-flow[u][v]);
pre[v] = u;
}
}
if(node[t] == ) break;
for(int u = t; u != s; u = pre[u]) {
flow[pre[u]][u] += node[t];
flow[u][pre[u]] -= node[t];
}
maxflow += node[t];
}
return maxflow;
} int main() {
int i, j;
int nn, mm;
int tmp, m;
int s, t;
int h[]; ///猪的头数
int last[]; ///记录猪圈上一个拥有钥匙的人 while(scanf("%d %d", &mm, &nn) != EOF) {
memset(cap,,sizeof(cap));
memset(last,,sizeof(last)); s = , t = nn+; for(i = ; i <= mm; ++i)
scanf("%d", &h[i]); for(i = ; i <= nn; ++i) { ///客户数
scanf("%d", &m); ///有几片钥匙
for(j = ; j < m; ++j) {
scanf("%d", &tmp);
if(last[tmp] == )
cap[s][i] += h[tmp];
else
cap[last[tmp]][i] = INF; ///客户到客户
last[tmp] = i;
}
scanf("%d", &cap[i][t]); ///客户到汇点
} printf("%d\n",EK(s, t));
}
return ;
}

EK算法应用,构图(POJ1149)的更多相关文章

  1. ACM/ICPC 之 ACM计算机工厂-EK算法(POJ3436)

    题意有点难读懂 //网络流-EK算法-ACM计算机工厂-构图重点 //Time:0Ms Memory:208K #include <iostream> #include<cstrin ...

  2. ACM/ICPC 之 电力网络-EK算法(POJ1459)

    按照电站发电(从源点到电站),消费者消费(从消费者到汇点)的想法构建网络,以下是EK解法 //网络流EK算法 //Time:922Ms memory:224K #include<iostream ...

  3. ACM/ICPC 之 网络流入门-EK算法(参考模板)(POJ1273)

    基于残留网络与FF算法的改进-EK算法,核心是将一条边的单向残留容量的减少看做反向残留流量的增加. //网络流 //EK算法 //Time:16Ms Memory:348K #include<i ...

  4. HDU1532 Drainage Ditches 网络流EK算法

    Drainage Ditches Problem Description Every time it rains on Farmer John's fields, a pond forms over ...

  5. vector实现最大流EK算法

    序: 在之前的文章中实现了不利用STL实现EK算法,效率也较高.这次我们企图简化代码,减少变量的使用与手写模拟的代码. 注意:vector等STL的container在不开O2优化的时候实现同一个效果 ...

  6. 二分图的最大匹配——最大流EK算法

    序: 既然是个图,并且求边数的最大值.那么这就可以转化为网络流的求最大流问题. 只需要将源点与其中一子集的所有节点相连,汇点与另一子集的所有节点相连,将所有弧的流量限制置为1,那么最大流 == 最大匹 ...

  7. 网络最大流算法—EK算法

    前言 EK算法是求网络最大流的最基础的算法,也是比较好理解的一种算法,利用它可以解决绝大多数最大流问题. 但是受到时间复杂度的限制,这种算法常常有TLE的风险 思想 还记得我们在介绍最大流的时候提到的 ...

  8. POJ3436 ACM Computer Factory【EK算法】

    题意: 每个电脑需要P个组成部分,现有N的机器,每个机器都可以对电脑进行加工,不过加工的前提是某些部分已经存在,加工后会增加某些部分.且在单位时间内,每个机器的加工都有一个最大加工容量,求能得到的最大 ...

  9. HDU1532 网络流最大流【EK算法】(模板题)

    <题目链接> 题目大意: 一个农夫他家的农田每次下雨都会被淹,所以这个农夫就修建了排水系统,还聪明的给每个排水管道设置了最大流量:首先输入两个数n,m ;n为排水管道的数量,m为节点的数量 ...

  10. 【最大流之ek算法】HDU1532 求最大流

    本来是继续加强最短路的训练,但是遇到了一个最短路 + 最大流的问题,最大流什么鬼,昨天+今天学习了一下,应该对ek算法有所了解,凭借学习后的印象,自己完成并ac了这个最大流的模板题 题目大意:都是图论 ...

随机推荐

  1. Photoshop入门教程(二):暂存盘设置与标尺设置

    新建文档之后大家就可以对图像进行编辑.在对图像进行编辑之前,先来了解一下如何查看图像的一些基本信息.在软件左下角,会有这样的信息显示窗口. 1窗口表示当前图像显示比例,200%代表当前为放大两倍显示. ...

  2. gulp不压缩打包layui

    从网上下载的layui都是压缩包,如何打包在一个文件且不压缩呢?如下方法: 1.https://gitee.com/sentsin/layui下载源码(本文的为2.4.5版本) 2.安装nodejs( ...

  3. java——重载解析、静态绑定、动态绑定

    重载解析: a被声明为A类型的对象,调用method()方法时,如果有多个同名方法,参数不同,编译器将列举所用类A的method()方法和所用父类中public类型的method()方法,编译器查看这 ...

  4. Python 类 面向对象(Classes)

    Python 支持面向对象 class Greeter(object): #构造函数 def __init__(self,name): self.name = name # 创建一个实例变量 #定义一 ...

  5. 美团Linux运维工程师面试真题

    1.LINUX系统软件安装和卸载的常见方法 答: A.rpm包卸载:rpm -e XXX.rpm   (如果想忽略依赖,可加上–nodeps) B.yum remove xxx.rpm  这种方法非常 ...

  6. 工作ui(2)

    做完整个小Demo整理的一些方法和踩过的miniUI的坑,分享出来希望大家批评指正,共同进步. 1.动态创建列:尽量不要直接在html文件里创建列,动态设置在js文件里方面添加.修改等. 首先把列定义 ...

  7. android Activity启动过程(三)从栈顶Activity的onPause到启动activityon的Resume过程

    ActivityStack.startPausingLocked() IApplicationThread.schudulePauseActivity() ActivityThread.sendMes ...

  8. android 闹钟设置问题

    Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...

  9. (转)linux route命令深入浅出与实战案例精讲

    linux route命令深入浅出与实战案例精讲 http://blog.51cto.com/oldboy/1119453 深入浅出之-route命令实战使用指南 http://blog.51cto. ...

  10. (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)

    HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/detai ...