博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3436 (最大流)
阅读量:6950 次
发布时间:2019-06-27

本文共 1335 字,大约阅读时间需要 4 分钟。

题意:每台电脑共有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
#include
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]

 

 

转载地址:http://zuuil.baihongyu.com/

你可能感兴趣的文章
区块链开发公司解析区块链在银行应用的优势
查看>>
浅析 <路印协议--Loopring> 及整体分析 Relay 源码
查看>>
腾讯正式开源高性能Hybrid框架VasSonic!
查看>>
Java读取文件
查看>>
我为什么要使用Webpack?
查看>>
[雪峰磁针石博客]软件测试专家工具包2性能测试
查看>>
SSM-Spring-04:Spring的DI的构造注入,P命名注入,和集合注入
查看>>
Python数据分析(二): Numpy技巧 (3/4)
查看>>
Linux中的静态库和动态库简介及生成过程示例
查看>>
python函数式编程-装饰器
查看>>
机器学习重塑供应链管理的10个途径
查看>>
前端:用css打造炫酷3d特效- css3d立方体
查看>>
集成Android SlidingMenu(SlideMenu)
查看>>
使用Cargo入门rust语言
查看>>
hibernate笔记--组合主键映射方法
查看>>
jQuery 前后端分离项目总结
查看>>
Python使用Mysql官方驱动(取出dict类型的数据)
查看>>
数据网格组件 Handsontable 不再开源,采用自拟的非商业许可证
查看>>
PostgreSQL 全文检索 - 词频统计
查看>>
这个“达芬奇”不一般!它是美国医生的好帮手
查看>>