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 jDi,k— output specification for part k.

Constraints

1 ≤ P ≤ 10, 1 ≤ ≤ 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

Bold texts appearing in the sample sections are informative and do not form part of the actual data.
题意:每台电脑有P部分,可以通过不同的机器来进行加工。 有N台机器,每台机器用2 P +1 个整数来描述:Qi Si,1 Si,2 ... Si,p Di,1 Di,2. .. Di,p,其中Qi 指定了机器的性能,表示每小时加工的电脑数量。 Si,j 为第j 部分的输入规格,0表示该部分不能被加工过,1表示该部分必须被加工过,2表示都可以。 Di,k 为第k 部分的输出规格。 0表示经过该机器不加工,1表示该机器加工该部分。 1≤P≤10,1≤N≤50,1≤Qi≤10000。

注意:本题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 (最大流)的更多相关文章

  1. 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 ...

  2. A - ACM Computer Factory - poj 3436(最大流)

    题意:有一个ACM工厂会生产一些电脑,在这个工厂里面有一些生产线,分别生产不同的零件,不过他们生产的电脑可能是一体机,所以只能一些零件加工后别的生产线才可以继续加工,比如产品A在生产线1号加工后继续前 ...

  3. (网络流)ACM Computer Factory --POJ --3436

    链接: http://poj.org/problem?id=3436 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82835#probl ...

  4. ACM Computer Factory POJ - 3436 网络流拆点+路径还原

    http://poj.org/problem?id=3436 每台电脑有$p$个组成部分,有$n$个工厂加工电脑. 每个工厂对于进入工厂的半成品的每个组成部分都有要求,由$p$个数字描述,0代表这个部 ...

  5. POJ-3436:ACM Computer Factory (Dinic最大流)

    题目链接:http://poj.org/problem?id=3436 解题心得: 题目真的是超级复杂,但解出来就是一个网络流,建图稍显复杂.其实提炼出来就是一个工厂n个加工机器,每个机器有一个效率w ...

  6. POJ 3436 ACM Computer Factory (网络流,最大流)

    POJ 3436 ACM Computer Factory (网络流,最大流) Description As you know, all the computers used for ACM cont ...

  7. Poj 3436 ACM Computer Factory (最大流)

    题目链接: Poj 3436 ACM Computer Factory 题目描述: n个工厂,每个工厂能把电脑s态转化为d态,每个电脑有p个部件,问整个工厂系统在每个小时内最多能加工多少台电脑? 解题 ...

  8. POJ 3436:ACM Computer Factory 网络流

    ACM Computer Factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6247   Accepted: 2 ...

  9. poj3436 ACM Computer Factory, 最大流,输出路径

    POJ 3436 ACM Computer Factory 电脑公司生产电脑有N个机器.每一个机器单位时间产量为Qi. 电脑由P个部件组成,每一个机器工作时仅仅能把有某些部件的半成品电脑(或什么都没有 ...

随机推荐

  1. Oracle里面的用户user无法登录 LOCKED(TIMED)

    SQL>conn test/test 还是报同样的错误,这就奇怪了.看看dba_users中该用户的状态等信息 SQL>select account_status,lock_date,pr ...

  2. oracle审计AUD$过大导致的数据库登录异常

      今天,省分技术人员反映数据库登录异常. 查询oerr,发现该错误是一般性提示,可能导致的原因有数据库未注册.本地文件配置问题等.由于平时连接并没有问题,是突发情况,所以排除了配置问题. 远程登录查 ...

  3. coco2dx jni 调用 java 相机返回 图片数据

    新建 一个项目 名字:testJin  包名:com.TanSon.org  python命令:python create_project.py -project testJin -package c ...

  4. scrapy-splash抓取动态数据例子九

    一.介绍 本例子用scrapy-splash抓取众视网网站给定关键字抓取咨询信息. 给定关键字:个性化:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  5. 从C转到JAVA学习路之基本知识对比(转)

    转自:http://blog.csdn.net/andywxf01/article/details/53502615 我一直在用C开发,想转到Java时最容易想到的事就是把C里写的代码和功能用JAVA ...

  6. 修改git的author 和 commiter

    点击:Add Entry

  7. ./configure: No such file or directory

    原文链接:http://www.cnblogs.com/niocai/archive/2011/07/14/2106088.html 普通情况下,多看看文件夹下的readme和INSTALL文件,里面 ...

  8. C++中string.find()函数与string::npos

    先说说string::npos参数: npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西.取值由实现决定,一般是 ...

  9. MySQL触发器 trigger之after与before区分

    after:是先完毕数据的增删改,然后再触发.触发的语句晚于监视的增删改,无法影响前面的增删修改作.也就是说先插入订单记录.再更新商品数量.当商品数量少于订单数量时造成爆库. before:先完毕触发 ...

  10. VB的第一个项目

     前言-----本人也是刚刚接触VB,企业的VB代码基本能看的懂,但是自己开发,只能呵呵.一般在刚学习一门新的语言时,很容易发生一些自己相当然的认识错误,so,记下并分享开发学习的过程,望指正.--- ...