ACM/ICPC 之 ACM计算机工厂-EK算法(POJ3436)
题意有点难读懂
//网络流-EK算法-ACM计算机工厂-构图重点
//Time:0Ms Memory:208K
#include <iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; #define MAXN 55
#define INF 0x3f3f3f3f int p,n;
int s,t;
int comp[MAXN][22];
int bd[MAXN][MAXN];
int res[MAXN][MAXN];
int pre[MAXN]; bool bfs()
{
memset(pre,-1,sizeof(pre));
queue<int> q;
q.push(s); pre[s] = 0;
while(!q.empty()){
int cur = q.front();
q.pop();
for(int i = 1; i <= t; i++)
{
if(pre[i] == -1 && res[cur][i])
{
pre[i] = cur;
if(i == t) return true;
q.push(i);
}
}
}
return false;
} int EK(int &total)
{
int maxFlow = 0;
while(bfs()){
int mind = INF;
for(int i = t; i != s; i = pre[i])
mind = min(mind, res[pre[i]][i]);
for(int i = t; i != s; i = pre[i])
{
if(i != t && pre[i] != s && res[pre[i]][i] == bd[pre[i]][i]) total++;
res[pre[i]][i] -= mind;
res[i][pre[i]] += mind;
if(i != t && pre[i] != s && res[i][pre[i]] == bd[i][pre[i]]) total--;
}
maxFlow += mind;
}
return maxFlow;
} int main()
{
//freopen("in.txt", "r", stdin);
scanf("%d%d",&p,&n);
s = 0; t = n + 1;
//输入+构图
for(int i = 1; i <= n; i++)
{
bool in = true, out = true;
for(int j = 0; j <= p*2; j++)
{
scanf("%d", &comp[i][j]);
if(j >= 1 && j <= p && comp[i][j] == 1) in = false;
if(j > p && !comp[i][j]) out = false; //未生产完
}
if(in) bd[s][i] = comp[i][0];
if(out) bd[i][t] = comp[i][0];
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
{
bool con = true;
if(i == j) continue;
for(int k = 1; k <= p; k++)
{
if(comp[j][k] != 2 && comp[i][k + p] != comp[j][k]) //判断是否可传输此线
{
con = false;
break;
}
}
if(con) bd[i][j] = comp[i][0]; //connection
} memcpy(res, bd, sizeof(bd));
int total = 0;
int maxFlow = EK(total);
printf("%d %d\n", maxFlow, total);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
{
if(bd[i][j] && bd[i][j] > res[i][j])
printf("%d %d %d\n", i, j, bd[i][j] - res[i][j]);
}
return 0;
}
ACM/ICPC 之 ACM计算机工厂-EK算法(POJ3436)的更多相关文章
- 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 ...
- 集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096)
集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096) 题目描述 有一个专门为了集合运算而设计的"集合栈"计算机.该 ...
- POJ3436 ACM Computer Factory【EK算法】
题意: 每个电脑需要P个组成部分,现有N的机器,每个机器都可以对电脑进行加工,不过加工的前提是某些部分已经存在,加工后会增加某些部分.且在单位时间内,每个机器的加工都有一个最大加工容量,求能得到的最大 ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- 【转】ACM/ICPC生涯总结暨退役宣言—alpc55
转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...
- hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...
- ACM - ICPC World Finals 2013 C Surely You Congest
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
随机推荐
- VIM编辑器简单总结
第一讲小结 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键. h (左移) j (下行) k (上行) l (右移) 2. ...
- ECharts学习(1)--简单图表的绘制
1.获取ECharts 官网 下载:http://echarts.baidu.com/download.html 2.在html页面中引入ECharts文件 <!DOCTYPE html> ...
- 使用jquery脚本获取随笔、文章和评论的统计数,自定义显示位置
为了这个问题,花了好些时间去摸索,无奈没有搞定.于是,我就到博问去提问,终于搞定! 在此,非常感谢SeayXu的热心帮助. 1.在需要的位置添加一个标签 <div id="stats_ ...
- 100 个 Linux 常用命令大全
1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和".." -l 列出 ...
- 自定义Docker容器的 hostname
自定义Docker容器的 hostname 作者: John Deng 原创内容,欢迎传播,请注明出处:http://www.cnblogs.com/johnd/p/set-docker-host ...
- Python Day4
一.装饰器 装饰器类似于一种动态增加函数功能的方法,使用@语法,放在它要装饰的函数定义处(函数定义的上面),实现为已经存在的函数增加新的功能. def outer(func): def innter( ...
- elastichq auto connect
$(document).ready(function () { $('#connectionURL').focus(); ajaxloading.hide(); scrollToTop.activat ...
- java -日期处理
1. 计算某年某月份 总有多少个周,每周的开始和结束时间? 思路:1.计算出本月实际的总天数 2.循环每一天,判断这天是否是 周日(1),如果是,周数加1,再次判断是否是月的第一个周一,如是,开始时间 ...
- 10月25日下午PHP静态、抽象、接口
多态(运行多态)概念:当父类引用指向子类实例,由于子类里面对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同状态.条件:1.必须发生在继承下2.必须重写父类方法3.父类引用调用该方法 如果 ...
- zabbix3.0.4 邮件告警详细配置
sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php.bash perl和web ...