poj 3436 (最大流)

题意:每台电脑共有p种零件,现在有n台机器,给出n台机器每台需要的一些种类零件当原料(0代表不需要,1代表必须要,2代表可有可无)和输出的产品零件。问怎么安排生产线使生产出来零件可以组装的电脑最多。

思路:如果机器的原材料什么都不需要的话就可以当源点,如果机器输出的零件种类为p就可以当汇点。刚开始想复杂了(1 0 1 可以同时跟1 0 0和0 0 1相连),这题只有当一台机器的输出格式跟另一台的输入格式一样时才可以相连,不能有多余的零件产生。最后想想如果不是这样的话,2代表的可有可无就没意义了。当p=3时,输出1 0 1不能跟1 0 0相连但可以跟1 0 2相连。







 

#include<stdio.h>
#include<string.h>
const int N=100;
const int inf=0x3fffffff;
int gap[N],dis[N],head[N],num,start,end,ans,pp[N*N];
struct edge
{int st,ed,flow,next;
}e[N*N],ee[N*N];
void addedge(int x,int y,int w)
{ee[num].st=x;ee[num].ed=y;ee[num].flow=w;e[num].st=x;e[num].ed=y;e[num].flow=w;e[num].next=head[x];head[x]=num++;e[num].st=y;e[num].ed=x;e[num].flow=0;e[num].next=head[y];head[y]=num++;
}
struct node
{int in[11],out[11],w;
}p[N];
int dfs(int u,int minflow)
{if(u==end)return minflow;int i,flow=0,f,v,min_dis=ans-1;for(i=head[u];i!=-1;i=e[i].next){if(e[i].flow<=0)continue;v=e[i].ed;if(dis[v]+1==dis[u]){f=dfs(v,e[i].flow>minflow-flow?minflow-flow:e[i].flow);e[i].flow-=f;e[i^1].flow+=f;flow+=f;if(flow==minflow)break;if(dis[start]>=ans)return flow;}min_dis=min_dis>dis[v]?dis[v]:min_dis;}	 if(flow==0){if(--gap[dis[u]]==0)dis[start]=ans;dis[u]=min_dis+1;gap[dis[u]]++;}return flow;
}
int isap()
{int maxflow=0;memset(dis,0,sizeof(dis));memset(gap,0,sizeof(gap));gap[0]=ans;while(dis[start]<ans)maxflow+=dfs(start,inf);return maxflow;
}
int main()
{int i,n,m,j,flag,k,sum,maxflow;while(scanf("%d%d",&m,&n)!=-1){memset(head,-1,sizeof(head));start=0,end=n+1;ans=end+1;num=0;for(i=1;i<=n;i++){flag=0;scanf("%d",&p[i].w);for(j=0;j<m;j++){scanf("%d",&p[i].in[j]);if(p[i].in[j]==1)flag=1;}if(flag==0)//如果什么原料都不要就与超级源点相连addedge(start,i,p[i].w);flag=0;for(j=0;j<m;j++){scanf("%d",&p[i].out[j]);if(p[i].out[j]==0)flag=1;}if(flag==0)//如果能生产所有的零件跟汇点相连addedge(i,end,p[i].w);}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(j==i)continue;for(k=0;k<m;k++){if(p[j].in[k]==2)continue;//可有可无的时候,不管p[i].out[k]为何值都可以if(p[i].out[k]==p[j].in[k])continue;//i的输出要跟j的输入一样break;}if(k==m)addedge(i,j,p[i].w);}}maxflow=isap();sum=0;for(i=0;i<num;i+=2){if(e[i].st==start||e[i].ed==end)continue;if(e[i].flow<ee[i].flow)//如果边的流量变小的,就有流量走过pp[sum++]=i;}printf("%d %d\n",maxflow,sum);for(j=0;j<sum;j++){i=pp[j];printf("%d %d %d\n",e[i].st,e[i].ed,ee[i].flow-e[i].flow);}}return 0;
}


 




 

转载于:https://www.cnblogs.com/pangblog/p/3331420.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web前端java script BOM学习笔记2017.8.1

DOM: document object model 文档对象模型提供了一套可以访问和修改HTML文档内容的方法访问&#xff1a;获取修改&#xff1a;设置1 JS要去操作HTML元素&#xff0c;必须要先用JS找到他&#xff0c;转换为JS的DOM对象操作&#xff1a;a 标签属性b css属性c 元素内容2 找对象的方…

【电路补习笔记】4、二极管的参数与选型

目录常用二极管二极管的结构与特性结构参数最大整流电流IFI_FIF​最大反向工作电压URU_RUR​反向电流IRI_RIR​最高工作频率fMf_MfM​应用常见应用单相整流电路单相半波整流电路单相桥式整流电路稳压管稳压管的伏安特性参数稳压值UZU_ZUZ​稳定电流IZI_ZIZ​额定功耗PZP_ZPZ​动…

wordpress 自定义字段

https://codex.wordpress.org/Using_Custom_Fields 显示自定义字段 <&#xff1f;php the_meta&#xff08;&#xff09;; &#xff1f;> 获取自定义字段

@font-face 使用过程

格式&#xff1a; TureTpe(.ttf)格式&#xff1a; .ttf字体是Windows和Mac的最常见的字体&#xff0c;是一种RAW格式&#xff0c;因此他不为网站优化,支持这种字体的浏览器有【IE9,Firefox3.5,Chrome4,Safari3,Opera10,iOS Mobile Safari4.2】 OpenType(.otf)格式&#xff1a;…

【电路补习笔记】5、三极管的参数与选型

目录常用的三极管型号结构作用放大三极管的三种放大组态的比较共射极放大电路单管共射放大电路&#xff08;受温度影响大&#xff09;的动态特性单管共射分压偏置放大电路的动态特性共集电极放大电路使用共基极放大电路多级放大电路多级放大电路的耦合多级放大电路的动态分析开…

WordPress函数:get_sidebar(获取侧边栏)

https://www.wpdaxue.com/get_sidebar.html 左边栏和右边栏 一个主题包含2个边栏。 1 2 3 4<?php get_header(); ?> <?php get_sidebar(left); ?> <?php get_sidebar(right); ?> <?php get_footer(); ?> 右边栏和左边栏的名字应该分别命名为…

office word 2010 怎么把左侧的标题大纲调出来?

有时候打开Word很希望出现左边的大纲&#xff0c;可是有时候就不出来&#xff0c;对word一些操作都忘得差不多了&#xff0c;这个小问题确实还是让我迷糊了一下~~网上的解决方案是&#xff1a; 打开Word2010文档窗口&#xff0c;切换到“视图”功能区。在“视图”功能区的“显示…

FFT 专题讲解

FFT是什么&#xff1f; FFT是快速傅里叶变换(fast Fourier transform)的简称。在ACM领域主要是用来快速求解多项式乘法的算法&#xff0c; 在信号领域也有很大用途 基础知识 卷积 举个例子&#xff0c;给你两个向量 \(a (a_0, a_1, a_2), b(b_0, b_1, b_2)\) a和b的卷积就是$ (…

PureMvc学习笔记

2019独角兽企业重金招聘Python工程师标准>>> PureMvc学习笔记&#xff1a; Mediator ->对应View层&#xff0c;内部绑定View对象&#xff0c;由 Mediator 对象来操作具体的视图组件。&#xff08;它的作用还包括&#xff1a;添加事件监听器&#xff0c;发送或接收…

【电路补习笔记】6、MOS管的参数与选型

目录符号寄生二极管&#xff08;体二极管&#xff09;的方向连接方法作用导通问题NMOSPMOS开关作用隔离作用引脚分辨常见型号NMOS的参数VDSS最大漏-源电压VGS最大栅源电压ID-连续漏电流VGS&#xff08;th&#xff09;RDS&#xff08;on&#xff09;导通电阻Ciss&#xff1a;输入…

HTML中 CSS去除li前面的小黑点

ul.tpl-left-nav-menu {list-style: none; } https://blog.csdn.net/qq_33833327/article/details/78652039

servlet核心API的UML图

转载于:https://www.cnblogs.com/suncoolcat/p/3339613.html

8.19noip模拟题

2017 8.19 NOIP模拟赛 by coolyangzc 共3道题目&#xff0c;时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c/pas exploit.cpp/c/pas 输入文件 type.in num.in exploit.in 输出文件 type.out num.out exploit.out 时间限制 …

【电路补习笔记】7、磁珠的工作原理、磁珠的分类、磁珠的模型、磁珠的参数、磁珠与电感的区别、磁珠的应用、磁珠的误区

目录简介铁耗磁滞损耗磁珠归类应用对比参数用途电源滤波低通滤波器的设计符号关于单点接地老师的主页&#xff1a;唐老师讲电赛 视频地址&#xff1a;磁珠的工作原理&#xff0c;磁珠的分类&#xff0c;磁珠的模型&#xff0c;磁珠的参数磁珠与电感的区别&#xff0c;磁珠的应用…

几个常用的正则表达式

几个常用的正则表达式(下面是在javascript里面的使用方式): 1. 正则表达式的中文表示 var reg_zh/^[\u4E00-\u9FA5\uF900-\uFA2D]*$/; 2. 正则表达式的英文表示(可以拆分成大小写) var reg_en /^[a-zA-Z]$/; 3. 正则表达式判断特殊字符(可以增减字符) var reg_spechars /^(?…

wordpress教程百科

https://www.xuewangzhan.net/jz/wpbbs/

顺序容器之vector

最近因为需要&#xff0c;在看C primer,哇&#xff0c;感觉这本书真不错&#xff0c;讲的细而且到位&#xff0c;而且大量的练习题&#xff0c;不愧为C学习的经典书籍。今天看了顺序容器方面的内容&#xff0c;现在汇报一下&#xff1a; 一、什么是vector vector是C标准模板库&…

利用python数据分析panda学习笔记之Series

1 Series a&#xff1a;类似一维数组的对象&#xff0c;每一个数据与之相关的数据标签组成 b:生成的左边为索引&#xff0c;不指定则默认从0开始。 1 from pandas import Series,DataFrame 2 import pandas as pd 3 #series 一组数据与相关得数据标签组成 4 objSeries([4,7,-5…

12864 OLED屏显示日历

目录calendar.c测试程序效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 stdint.h见【51单片机快速入门指南】1&#xff1a;基础知识和工程创建 I2C版OLED驱动程序见【51单片机快速入门指南】4.2&#xff1a; SSD1306…

【笔记】iOS开发基础笔记二

1.block 2.didReceiveMemoryWarning 使用 3.HTTP&#xff0c;TCP&#xff0c;UDP 答&#xff1a;HTTP是应用层协议&#xff0c;定义的是传输数据的内容的规范HTTP协议中的数据是利用TCP协议传输的&#xff0c;所以支持HTTP也就一定支持TCP HTTP支持的是www服务 而TCP/IP是协议…