ACM Computer Factory - poj 3436 (最大流)
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 5949 | Accepted: 2053 | Special Judge |
Description
As you know, all the computers used for ACM contests must be identical, so the participants compete on equal terms. That is why all these computers are historically produced at the same factory.
Every ACM computer consists of P parts. When all these parts are present, the computer is ready and can be shipped to one of the numerous ACM contests.
Computer manufacturing is fully automated by using N various machines. Each machine removes some parts from a half-finished computer and adds some new parts (removing of parts is sometimes necessary as the parts cannot be added to a computer in arbitrary order). Each machine is described by its performance (measured in computers per hour), input and output specification.
Input specification describes which parts must be present in a half-finished computer for the machine to be able to operate on it. The specification is a set of P numbers 0, 1 or 2 (one number for each part), where 0 means that corresponding part must not be present, 1 — the part is required, 2 — presence of the part doesn't matter.
Output specification describes the result of the operation, and is a set of P numbers 0 or 1, where 0 means that the part is absent, 1 — the part is present.
The machines are connected by very fast production lines so that delivery time is negligibly small compared to production time.
After many years of operation the overall performance of the ACM Computer Factory became insufficient for satisfying the growing contest needs. That is why ACM directorate decided to upgrade the factory.
As different machines were installed in different time periods, they were often not optimally connected to the existing factory machines. It was noted that the easiest way to upgrade the factory is to rearrange production lines. ACM directorate decided to entrust you with solving this problem.
Input
Input file contains integers P N, then N descriptions of the machines. The description of ith machine is represented as by 2 P + 1 integers Qi Si,1 Si,2...Si,P Di,1 Di,2...Di,P, where Qi specifies performance, Si,j — input specification for part j, Di,k— output specification for part k.
Constraints
1 ≤ P ≤ 10, 1 ≤ N ≤ 50, 1 ≤ Qi ≤ 10000
Output
Output the maximum possible overall performance, then M — number of connections that must be made, then M descriptions of the connections. Each connection between machines A and B must be described by three positive numbers A B W, where W is the number of computers delivered from A to B per hour.
If several solutions exist, output any of them.
Sample Input
- Sample input 1
- 3 4
- 15 0 0 0 0 1 0
- 10 0 0 0 0 1 1
- 30 0 1 2 1 1 1
- 3 0 2 1 1 1 1
- Sample input 2
- 3 5
- 5 0 0 0 0 1 0
- 100 0 1 0 1 0 1
- 3 0 1 0 1 1 0
- 1 1 0 1 1 1 0
- 300 1 1 2 1 1 1
- Sample input 3
- 2 2
- 100 0 0 1 0
- 200 0 1 1 1
Sample Output
- Sample output 1
- 25 2
- 1 3 15
- 2 3 10
- Sample output 2
- 4 5
- 1 3 3
- 3 5 3
- 1 2 1
- 2 4 1
- 4 5 1
- Sample output 3
- 0 0
Hint
注意:本题Sample I/O这段英文不用输入输出
Sample input:
P N (N台机器,每台机器有P部分)
接着输入N行,其实每行都是一个结点的信息
每一行的格式为 一个Q P个S P个D
其中Q为当前结点的容量,S都是当前结点的输入规格,D都是输出规格
Sample output:
第一行的两个数字分别表示:最大流的值,流量发生变化的边数M(和s还有t关联的边不在其内,那些不属于原有的边,是附加边)
接下来有M行,每一行都有三个数字,A B W
A B为流量发生变化的边的端点,W为流量的变化值(每条边初始流量为0,最终流量就是找到最大流时的流量)
若图不连通,则输出0 0
- #include <iostream>
- #include<stdio.h>
- #include<queue>
- #include<string.h>
- using namespace std;
- int map[][],mapbk[][];
- int input[][];
- int path[];
- int flow[];
- int change[][];
- int start,end;
- int p,n;
- queue<int> q;
- int BFS(){
- memset(path,-,sizeof(path));
- while(!q.empty()) q.pop();
- q.push(start);
- flow[start]=;
- path[start]=;
- while(!q.empty()){
- int v=q.front();
- if(v==end)
- break;
- q.pop();
- for(int i=;i<=end;i++){
- if(path[i]==- && map[v][i]!= && start!=i){
- flow[i]=flow[v]<map[v][i]?flow[v]:map[v][i];
- path[i]=v;
- q.push(i);
- }
- }
- }
- if(path[end]==-) return -;
- else
- return flow[end];
- }
- int Edmonds_Karp(){
- int step,max_flow=,now,pre;
- while(){
- step=BFS();
- if(step==-)
- break;
- max_flow+=step;
- now=end;
- while(now!=start){
- pre=path[now];
- map[pre][now]-=step;
- map[now][pre]+=step;
- now=pre;
- }
- }
- return max_flow;
- }
- int main() {
- while(cin>>p>>n){
- memset(map,,sizeof(map));
- memset(input,,sizeof(input));
- //gets(str);
- for(int i=;i<=n;i++){
- for(int j=;j<*p+;j++){
- int t;
- cin>>t;
- input[i][j]=t;
- }
- }
- //getchar();
- // gets(str);
- for(int i=;i<=n;i++){
- int flag=;
- for(int j=;j<p+;j++){
- if(input[i][j]==)
- flag=;
- }
- if(flag!=){
- map[][i]=input[i][];
- }
- flag=;
- for(int j=p+;j<*p+;j++){
- if(input[i][j]==)
- flag=;
- }
- if(flag!=)
- map[i][n+]=input[i][];
- flag=;
- for(int j=;j<=n;j++){
- if(i!=j){
- for(int k=;k<p+;k++){
- if(i!=j&&input[i][p+k]+input[j][k]==)
- flag=;
- }
- if(flag!=)
- map[i][j]=input[i][]<input[j][]?input[i][]:input[j][];
- flag=;
- }
- }
- }
- start=;
- end=n+;
- memcpy(mapbk,map,sizeof(map));
- int result=Edmonds_Karp();
- int count=;
- for(int i=;i<n+;i++){
- for(int j=;j<n+;j++){
- if(map[i][j]<mapbk[i][j]){
- change[count][]=i;
- change[count][]=j;
- change[count][]=mapbk[i][j]-map[i][j];
- count++;
- }
- }
- }
- cout<<result<<' '<<count<<endl;
- for(int i=;i<count;i++){
- cout<<change[i][]<<' '<<change[i][]<<' '<<change[i][]<<endl;
- }
- }
- return ;
- }
ACM Computer Factory - poj 3436 (最大流)的更多相关文章
- A - ACM Computer Factory POJ - 3436 网络流
A - ACM Computer Factory POJ - 3436 As you know, all the computers used for ACM contests must be ide ...
- A - ACM Computer Factory - poj 3436(最大流)
题意:有一个ACM工厂会生产一些电脑,在这个工厂里面有一些生产线,分别生产不同的零件,不过他们生产的电脑可能是一体机,所以只能一些零件加工后别的生产线才可以继续加工,比如产品A在生产线1号加工后继续前 ...
- (网络流)ACM Computer Factory --POJ --3436
链接: http://poj.org/problem?id=3436 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82835#probl ...
- ACM Computer Factory POJ - 3436 网络流拆点+路径还原
http://poj.org/problem?id=3436 每台电脑有$p$个组成部分,有$n$个工厂加工电脑. 每个工厂对于进入工厂的半成品的每个组成部分都有要求,由$p$个数字描述,0代表这个部 ...
- POJ-3436:ACM Computer Factory (Dinic最大流)
题目链接:http://poj.org/problem?id=3436 解题心得: 题目真的是超级复杂,但解出来就是一个网络流,建图稍显复杂.其实提炼出来就是一个工厂n个加工机器,每个机器有一个效率w ...
- POJ 3436 ACM Computer Factory (网络流,最大流)
POJ 3436 ACM Computer Factory (网络流,最大流) Description As you know, all the computers used for ACM cont ...
- Poj 3436 ACM Computer Factory (最大流)
题目链接: Poj 3436 ACM Computer Factory 题目描述: n个工厂,每个工厂能把电脑s态转化为d态,每个电脑有p个部件,问整个工厂系统在每个小时内最多能加工多少台电脑? 解题 ...
- POJ 3436:ACM Computer Factory 网络流
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6247 Accepted: 2 ...
- poj3436 ACM Computer Factory, 最大流,输出路径
POJ 3436 ACM Computer Factory 电脑公司生产电脑有N个机器.每一个机器单位时间产量为Qi. 电脑由P个部件组成,每一个机器工作时仅仅能把有某些部件的半成品电脑(或什么都没有 ...
随机推荐
- Delphi 目前使用delay函数功能
procedure sdfg.iTimers1Timer4(Sender: TObject);var vsub : Cardinal; vSetinterval: Cardinal;begin vsu ...
- zk介绍
1. 配置管理 Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更.这样就省去手动拷贝配置了,还保证了可靠和一致性. ...
- android开发游记:SpringView 下拉刷新的高效解决方式,定制你自己风格的拖拽页面
关于下拉刷新/上拉载入很多其它的解决方式网上已经有非常多了,浏览了眼下主流的下拉控件比方PullToRefresh库等.第一:大多数实现库都难以进行动画和样式的自己定义. 第二:不能非常好的兼容多种滚 ...
- iOS:实现邮件和短信发送的简单示例
发送邮件1.导入库文件:MessageUI.framework2.引入头文件3.实现代理<MFMailComposeViewControllerDelegate> 和 <UINavi ...
- Server 2008 R2 安装活动目录和配置DNS及故障解决
一.安装windows2008_64bit_r2 给服务器设置密码:xxxxxxxx 二.安装配置DNS规则 1.更改服务器主机名:DCserver 2.配置静态IP地址 IP地址:10.0.100. ...
- struts2,action上传文件
通过servlet实现文件上传,可以用用servlet接受到request的值的话:主要是这句话 List<?> items = upload.parseRequest(request); ...
- 通过案例对SparkStreaming透彻理解三板斧之三
本课将从二方面阐述: 一.解密SparkStreaming Job架构和运行机制 二.解密SparkStreaming容错架构和运行机制 一切不能进行实时流处理的数据都将是无效的数据.在流处理时代,S ...
- 【Hadoop】HDFS客户端开发示例
1.原理.步骤 2.HDFS客户端示例代码 package com.ares.hadoop.hdfs; import java.io.FileInputStream; import java.io.F ...
- Directive Controller And Link Timing In AngularJS
I've talked about the timing of directives in AngularJS a few times before. But, it's a rather compl ...
- try....exception....finally
class MyException(Exception): def __init__(self,msg): self.msg=msg def __str__(self): return self.ms ...