POJ3436 ACM Computer Factory(最大流)
题目链接。
分析:
题意很难懂。
大体是这样的:给每个点的具体情况,1.容量 2。进入状态 3.出去状态。求最大流。
因为有很多点,所以如果一个点的出去状态满足另一个点的进入状态,则这两个点可以连一条边。容量为两者容量的较小值。
再建立一个超源、一个超汇。让超源与所有进入状态全为0或者不全为0但只包含0和2的点连边,同时让所有出去状态全部为1的与超汇连边。
然后求最大流.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue> using namespace std; const int maxn = ;
const int INF = (<<); int in[maxn][], cap[maxn][maxn], n, flow[maxn][maxn]; int EK(int s, int t) {
queue<int> q;
int p[maxn], a[maxn]; int f = ; memset(flow, , sizeof(flow)); while(true) {
memset(a, , sizeof(a));
a[s] = INF;
q.push(s);
while(!q.empty()) {
int u = q.front(); q.pop();
for(int v = ; v < n; v++) if(!a[v] && cap[u][v] > flow[u][v]) {
p[v] = u; q.push(v);
a[v] = min(a[u], cap[u][v]-flow[u][v]);
}
} if(a[t] == ) break;
for(int u=t; u != s; u = p[u]) {
flow[p[u]][u] += a[t];
flow[u][p[u]] -= a[t];
}
f += a[t];
}
return f;
} int main() {
int p; while(scanf("%d%d", &p, &n) == ) { memset(cap, , sizeof(cap)); for(int i=; i<*p+; i++) { //初始化超源,超汇
in[][i] = ;
in[n+][i] =;
} for(int i=; i<=n; i++) { //输入数据
for(int j=; j<*p+; j++) {
scanf("%d", &in[i][j]);
}
} n+=; //点数+2 for(int i=; i<n; i++) { //将可以连通的点,记录,算出每条边的容量
for(int j=; j<n; j++) {
if(i == j) continue; bool flag = true;
for(int k=; k<=p; k++) {
if( !((in[j][k] == ) || (in[i][k+p] == in[j][k])) ) {
flag = false;
}
}
if(flag && i == ) cap[i][j] = in[j][];
else if(flag && j == n-) cap[i][j] = in[i][];
else if(flag) cap[i][j] += min(in[i][], in[j][]);
}
} printf("%d ", EK(, n-)); //增广路算法 int cnt = ; //计数
for(int i=; i<n-; i++) {
for(int j=; j<n-; j++) {
if(flow[i][j] > ) cnt++;
}
}
printf("%d\n", cnt); for(int i=; i<n-; i++) { //输出
for(int j=; j<n-; j++) {
if(flow[i][j] > ) printf("%d %d %d\n", i, j, flow[i][j]);
}
}
} return ;
}
POJ3436 ACM Computer Factory(最大流)的更多相关文章
- POJ3436 ACM Computer Factory —— 最大流
题目链接:https://vjudge.net/problem/POJ-3436 ACM Computer Factory Time Limit: 1000MS Memory Limit: 655 ...
- poj-3436.ACM Computer Factory(最大流 + 多源多汇 + 结点容量 + 路径打印 + 流量统计)
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10940 Accepted: ...
- POJ-3436 ACM Computer Factory 最大流 为何拆点
题目链接:https://cn.vjudge.net/problem/POJ-3436 题意 懒得翻,找了个题意. 流水线上有N台机器装电脑,电脑有P个部件,每台机器有三个参数,产量,输入规格,输出规 ...
- POJ3436 ACM Computer Factory 【最大流】
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5412 Accepted: 1 ...
- poj3436 ACM Computer Factory, 最大流,输出路径
POJ 3436 ACM Computer Factory 电脑公司生产电脑有N个机器.每一个机器单位时间产量为Qi. 电脑由P个部件组成,每一个机器工作时仅仅能把有某些部件的半成品电脑(或什么都没有 ...
- POJ3436 ACM Computer Factory(最大流/Dinic)题解
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8944 Accepted: 3 ...
- POJ-3436 ACM Computer Factory(网络流EK)
As you know, all the computers used for ACM contests must be identical, so the participants compete ...
- Poj 3436 ACM Computer Factory (最大流)
题目链接: Poj 3436 ACM Computer Factory 题目描述: n个工厂,每个工厂能把电脑s态转化为d态,每个电脑有p个部件,问整个工厂系统在每个小时内最多能加工多少台电脑? 解题 ...
- POJ-3436:ACM Computer Factory (Dinic最大流)
题目链接:http://poj.org/problem?id=3436 解题心得: 题目真的是超级复杂,但解出来就是一个网络流,建图稍显复杂.其实提炼出来就是一个工厂n个加工机器,每个机器有一个效率w ...
随机推荐
- Codeforces 112B-Petya and Square(实现)
B. Petya and Square time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- [io PWA] keynote: Launching a Progressive Web App on Google.com
Mainly about Material design (effects / colors / flashy stuff) Components (web components / polymer) ...
- Qt 学习之路:存储容器
存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特定类型的对象,通常是一些常用的数据结构,一般是通用模板类的形式.C++ 提供了一套完整的解决方案, ...
- css之选择器
我们都用过jquery,使用jquery选择器,非常的简单,最近刚好有项目上手,拿起书本看了一下,发现好多的东西都忘掉了,好记性不如烂笔头,就将这章内容记录下来,现在我们看下css原生的选择器. 选择 ...
- Android Service生命周期及用法
Service概念及用途:Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行, ...
- (转)Mac OS X中配置Apache
我使用的Mac OS X版本是10.8.2,Mac自带了Apache环境. 启动Apache 设置虚拟主机 启动Apache 打开“终端(terminal)”,输入 sudo apachectl -v ...
- Tempdb对SQL Server性能的影响
转载文章,原文地址:http://www.cnblogs.com/laodao1/archive/2010/04/15/1712395.html1.SQL Server系统数据库介绍 SQL Serv ...
- Cacti以MB为单位监控流量
Cacti自带的流量监控阀值模板为“Interface – Traffic”,只能监控bytes,在添加阀值之后,报警的流量信息以bytes为单位,查看很不友好,可以通过以下方法将btyes转换成MB ...
- 控制器View的加载过程
1.控制器内部的view是延迟加载 1> 用到时再加载2> 加载完毕后会调用控制器的viewDidLoad方法 2.创建控制器的方式 1> 直接通过代码创建OneViewContro ...
- 多核CPU利用测试
一直在想程序上是否特意让线程在指定的CPU上去运行,这样可以提高运行效率,所以特地写个代码让CPU使用率画正弦曲线的实验,我使用的是AMD X4 641的CPU,为四核四线程的片子. 代码如下 # ...