题目链接: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 = 110;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=0;int u,v;memset(flow, 0, sizeof(flow));while(true) {memset(node, 0, sizeof(node));node[s] = INF;q.push(s);while(!q.empty()) {u = q.front();q.pop();for(v = 0; 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] == 0) 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[1010];        ///猪的头数int last[1010];     ///记录猪圈上一个拥有钥匙的人while(scanf("%d %d", &mm, &nn) != EOF) {memset(cap,0,sizeof(cap));memset(last,0,sizeof(last));s = 0, t = nn+1;for(i = 1; i <= mm; ++i)scanf("%d", &h[i]);     for(i = 1; i <= nn; ++i) {      ///客户数scanf("%d", &m);            ///有几片钥匙for(j = 0; j < m; ++j) {scanf("%d", &tmp);if(last[tmp] == 0)cap[s][i] += h[tmp];elsecap[last[tmp]][i] = INF;    ///客户到客户last[tmp] = i;}scanf("%d", &cap[i][t]);        ///客户到汇点
        }printf("%d\n",EK(s, t));}return 0;
}

View Code

转载于:https://www.cnblogs.com/TreeDream/p/5510100.html

EK算法应用,构图(POJ1149)相关推荐

  1. 网络流——最大流EK算法讲解

    网络流--最大流EK算法讲解 好了,这是第二篇博客了,如第一篇所述,来讲一讲刚刚理解的网络流.因为本人只会EK算法,所以先讲这个算法.(我会去补知识点的!!!) 什么是网络流??? 读者们刚接触这个知 ...

  2. HDU 3549 Flow Problem(最大流模版EK算法)

    题目链接 第一道最大流,赤裸裸的模版题,刚好可以熟悉模版用.今天看了一下最大流,就看了一个EK算法,感觉有点和二分图匹配算法有点相似,对于最大流问题有点了解了,不过为什么这么做,也不是 很懂,只是把代 ...

  3. 图论 —— 网络流 —— 最大流 —— FF 算法与 EK 算法

    [概述] FF 算法与 EK 算法是求解最大流的一般增广路方法,其时间复杂度均为 O(n*m*m) Ford-Fulkerson 算法是求解最大流的最基础的算法,其核心思想是增广路定理:网络达到最大流 ...

  4. 网络流最大流----EK算法

    先来介绍一些基本概念: 网络是指一个有向图G=(V,E),有两个特殊节点:源点S和汇点T.每条有向边(x,y)都有一个权值c(x,y),称为边的容量.如果(x,y)不在图中,那么就有c(x,y)=0. ...

  5. (通俗易懂小白入门)网络流最大流——EK算法

    网络流 网络流是模仿水流解决生活中类似问题的一种方法策略,来看这么一个问题,有一个自来水厂S,它要向目标T提供水量,从S出发有不确定数量和方向的水管,它可能直接到达T或者经过更多的节点的中转,目前确定 ...

  6. 最大流算法之一——EK算法

    EK算法流程 EK算法的流程很简单: 随意找一个可行流作为流量网络更新的基础(一般题目没有规定可以采用流量为0的可行流) 利用bfsbfsbfs找一条从源点到汇点的可行流路径 用新找到的可行流路径更新 ...

  7. 网络流之最大流算法——EK算法(通俗讲解)

    先放道模板题来说明网络流: Power Network A power network consists of nodes (power stations, consumers and dispatc ...

  8. 网络流问题以及EK算法复杂度分析

    网络流问题以及EK算法复杂度分析 一.网络流算法 通过一个例子引入网络流问题. 现有一个自来水厂要往家里通水,自来水厂用Vs表示,家用Vt表示.从自来水厂到家之间连接了很多水管,并且中途经过很多转接点 ...

  9. 【网络流】EK算法及其优化

    今天上午我仿佛知道了什么叫做网络流,这里推荐一篇博客,大家入门网络流的可以看一下这篇博客,保证一看就懂! 博客链接: 网络流入门 这里有一篇经过我改过的EK带注释代码(博客里也有一样的,只是加了一些注 ...

最新文章

  1. 没抢到欧冠杯的票?没关系!在VR中看!
  2. 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
  3. 中职计算机基础课教学策略研究,中职计算机基础知识教学方法及教学策略研究.doc...
  4. w25q64 linux,W25Q64Flash芯片STM32操作
  5. Happy Necklace
  6. rest接口webservice接口利用http请求方式发送数据
  7. 记录一次归档日志爆满事件
  8. Java 简单TCP文件传输
  9. 核心网upf作用_5G核心网关键技术研究
  10. HTTP请求报文和响应报文、http协议状态码分类和常用状态码、Cookie、curl工具、httpd自带的工具、压力测试工具
  11. 单机魔域显示服务器未启动,魔域单机版_开始游戏
  12. 又一个布局利器, CSS 伪类 :placeholder-shown
  13. Shader入门实战,拳皇被击闪白特效!
  14. Ubuntu 11.10 图形(图解)安装教程、基本设置、网络设置、软件源、硬件驱动
  15. php发送 日历邮件_如何阻止垃圾邮件发送者攻击您的Google日历
  16. 关于Android项目中的Toast那些动画实现方式
  17. 古人的地图是怎么来的?没高科技情况下,是靠什么方法测绘的呢?
  18. HEVC (H.265)介绍(转)
  19. 【OR】YALMIP 半正定规划
  20. 供应链金融智能合约整理

热门文章

  1. mui 使用LocalStore记住用户密码方法
  2. java 张龙_张龙 JAVA5新特性学习笔记
  3. php 类的数组对象,javascript、php数组对象互转类
  4. oracle job 时间间隔,关于job的时间间隔的一个问题
  5. tcp连接 本地端口_Windows开启端口转发功能
  6. 查看和修改sql环境变量
  7. Windows系统下nodejs、npm、express的下载和安装教程详解
  8. IIS状态代码的含义
  9. 使用ASP.NET 2.0提供的WebResource管理资源
  10. 树形DP入门题目推荐以及解析