EK算法应用,构图(POJ1149)
题目链接: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)的更多相关文章
- ACM/ICPC 之 ACM计算机工厂-EK算法(POJ3436)
题意有点难读懂 //网络流-EK算法-ACM计算机工厂-构图重点 //Time:0Ms Memory:208K #include <iostream> #include<cstrin ...
- ACM/ICPC 之 电力网络-EK算法(POJ1459)
按照电站发电(从源点到电站),消费者消费(从消费者到汇点)的想法构建网络,以下是EK解法 //网络流EK算法 //Time:922Ms memory:224K #include<iostream ...
- ACM/ICPC 之 网络流入门-EK算法(参考模板)(POJ1273)
基于残留网络与FF算法的改进-EK算法,核心是将一条边的单向残留容量的减少看做反向残留流量的增加. //网络流 //EK算法 //Time:16Ms Memory:348K #include<i ...
- HDU1532 Drainage Ditches 网络流EK算法
Drainage Ditches Problem Description Every time it rains on Farmer John's fields, a pond forms over ...
- vector实现最大流EK算法
序: 在之前的文章中实现了不利用STL实现EK算法,效率也较高.这次我们企图简化代码,减少变量的使用与手写模拟的代码. 注意:vector等STL的container在不开O2优化的时候实现同一个效果 ...
- 二分图的最大匹配——最大流EK算法
序: 既然是个图,并且求边数的最大值.那么这就可以转化为网络流的求最大流问题. 只需要将源点与其中一子集的所有节点相连,汇点与另一子集的所有节点相连,将所有弧的流量限制置为1,那么最大流 == 最大匹 ...
- 网络最大流算法—EK算法
前言 EK算法是求网络最大流的最基础的算法,也是比较好理解的一种算法,利用它可以解决绝大多数最大流问题. 但是受到时间复杂度的限制,这种算法常常有TLE的风险 思想 还记得我们在介绍最大流的时候提到的 ...
- POJ3436 ACM Computer Factory【EK算法】
题意: 每个电脑需要P个组成部分,现有N的机器,每个机器都可以对电脑进行加工,不过加工的前提是某些部分已经存在,加工后会增加某些部分.且在单位时间内,每个机器的加工都有一个最大加工容量,求能得到的最大 ...
- HDU1532 网络流最大流【EK算法】(模板题)
<题目链接> 题目大意: 一个农夫他家的农田每次下雨都会被淹,所以这个农夫就修建了排水系统,还聪明的给每个排水管道设置了最大流量:首先输入两个数n,m ;n为排水管道的数量,m为节点的数量 ...
- 【最大流之ek算法】HDU1532 求最大流
本来是继续加强最短路的训练,但是遇到了一个最短路 + 最大流的问题,最大流什么鬼,昨天+今天学习了一下,应该对ek算法有所了解,凭借学习后的印象,自己完成并ac了这个最大流的模板题 题目大意:都是图论 ...
随机推荐
- 解决报错:import sun.misc.BASE64Decoder无法找到
解决报错:import sun.misc.BASE64Decoder无法找到 2017年09月29日 16:03:26 chaoyu168 阅读数:2116 标签: sun.misc.BASE64De ...
- Oracle trunc函数使用
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(trunc(sysdate), 'yyyy-mm-dd hh24:mi:ss') f ...
- thinkphp自动验证和自动完成
tp验证码的自动验证小案例 模板文件 <form action="" method="post"> <p> User: <inpu ...
- 2----scrapy框架之代理and日志级和请求传参
一.代理 爬虫文件 daili.py class DailiSpider(scrapy.Spider): name = 'daili' #allowed_domains = ['www.xxx.com ...
- 爬虫(POST)——有道翻译(有bug)
工具:python3 过程:抓包得到有道翻页面的url:复制post请求头,得到headers中的信息:复制post请求的body,得到formdata中的信息.构造post请求,返回响应 impor ...
- ubuntu ifconfig 不显示IP地址
本文转载:https://blog.csdn.net/cmh477660693/article/details/52760236 ubuntu终端下命令ifconfig的问题解决 问题一. ifcon ...
- Ajax传统操作
JavaScript: ...
- Hibernate通过自编写Sql修改
@Override public void updateTemMsg(String ticket,String time) { String sql="UPDATE INTER_TEMPTO ...
- Mybatis学习笔记1 - Hello World
1.pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- 使用ServletContainerInitializer动态注册组件
1.背景 在web容器(例如tomcat)启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等.对此servlet规范提供了ServletContainerInit ...