poj3426(网络流)
题意:有n个机器加工计算机,有p个计算机零件,接下来输出n个机器加工计算机情况,2*p+1个数据,第一个是每小时最多生产计算机台数,接下来p个数是,可以从p个零件状态的计算机生产到后面p个零件状态的计算机。问最多一小时生产多少计算机。
当然这里零件状态是这样定义的,0表示没有,1表示必须要,2表示可有可无(所以2可以无视)
思路:
当然是从零件全是0的计算机开始了。然而你忘了有2也是可以的,只要零件非1就行。(一个坑点)
会想到有很多可以加工全非1的机器,和加工到全1的机器,那么就是一个多源点,多汇点的网络流,就要用一个超级源点,超级汇点。
超级源点连接可以从零件全非1开始加工的机器,而可以加工到全为1的机器连接超级汇点(第一步)
那么下一步就是连接机器,看是否加工的半成品是否可以给下一个机器加工。只要每个零件对应不能同时一个0,一个1,即可。(第二步)
接下来就是求网络流最大流量了,这里用dinic算法模板就行。(第三步)
最后只要计算有流量的路径并输出即可。(最后一步)
最后想复杂了,以为要输出每条增广路径,最后wa了几发。。。
代码:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<queue> #define inf 0x3f3f3f3f using namespace std; typedef long long ll; struct node{int c,f; }mp[100][100]; int sx,ex,n,m,cnt; int g[100][100]; int step[100],ans,li,outline[100][5]; //li记录流量路径条数,outline记录路径情况 bool bfs()//dinic--求层次网络 {memset(step,0,sizeof(step));step[sx]=1;queue<int> q;q.push(sx);while(!q.empty()){int p=q.front();q.pop();for(int i=0;i<=m+1;i++){if(!step[i]&&mp[p][i].c-mp[p][i].f){step[i]=step[p]+1;q.push(i);}}}return step[ex]!=0; }int dinic(int pos,int flow)//求出层次网络中所有增广路径流量 {int f=flow;if(pos==ex)return flow;for(int i=0;i<=m+1;i++){if(mp[pos][i].c-mp[pos][i].f&&step[pos]+1==step[i]){int a=mp[pos][i].c-mp[pos][i].f;int t=dinic(i,min(a,flow));mp[pos][i].f+=t;mp[i][pos].f-=t;flow-=t;}}return f-flow; }void solve()//最大流 {while(bfs()){ans+=dinic(sx,inf);}return ; }int main() {while(scanf("%d%d",&n,&m)!=EOF){memset(mp,0,sizeof(mp));sx=0,ex=m+1;//起点sx,终点ex ans=0,li=0;for(int i=1;i<=m;i++)for(int j=0;j<=2*n;j++)scanf("%d",&g[i][j]);for(int i=1;i<=m;i++)//判断是否可以连接超级源点或超级汇点 {int flag1=0,flag2=0;for(int j=1;j<=n;j++){if(g[i][j]==1)flag1=1;if(g[i][j+n]==0)flag2=1;}if(!flag1)//连接超级源点 mp[sx][i].c=g[i][0];if(!flag2)//连接超级汇点 mp[i][ex].c=g[i][0];}for(int i=1;i<=m;i++)//判断是否可以两两工厂相连 {for(int j=1;j<=m;j++){if(i==j)continue;int flag=0;for(int k=1;k<=n;k++){if(g[i][k+n]+g[j][k]==1){flag=1;break;}}if(flag)continue;mp[i][j].c=min(g[i][0],g[j][0]);}}solve();//求最大流 for(int i=1;i<=m;i++)//判断路是否有流量 {for(int j=1;j<=m;j++){if(mp[i][j].f>0){li++;outline[li][1]=i;outline[li][2]=j;outline[li][3]=mp[i][j].f;}}}cout<<ans<<' '<<li<<endl;for(int i=1;i<=li;i++){cout<<outline[i][1]<<' '<<outline[i][2]<<' '<<outline[i][3]<<endl;}}return 0; }
转载于:https://www.cnblogs.com/xiongtao/p/11140399.html
poj3426(网络流)相关推荐
- 网络流24题(1) P2756 飞行员配对方案问题
题目链接 题意:求一个最大的二分匹配,网络流最大流,自己造一个源点一个汇点,源点0到1~m流为1,m+1~n到汇点n+1流为1,然后就是题目给出的也是流为1,图就是这样的,套dinic一个板子,但是题 ...
- 【网络流24题】最小路径覆盖问题
[题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...
- 网络流—Edmonds-Karp 最短增广路算法(最大流)
网络流----Edmonds-Karp 最短增广路算法 ■求最大流的过程,就是不断找到一条源到汇的路径,然后构建残余网络,再在残余网络上寻找新的路径,使总流量增加,然后形成新的残余网络,再寻找新路径- ...
- [BZOJ2502]清理雪道 有上下界网络流(最小流)
2502: 清理雪道 Time Limit: 10 Sec Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有 ...
- poj1273(最大网络流问题模版)
网络流才学习,还是不怎么懂,一开始都是看网上写的算法模版,下面的两种方法也是用了网上的模版的: 方法一: #include <iostream> #include<algorithm ...
- 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流
题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...
- 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流
学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...
- 最大流 ---- 最小路径覆盖 ---- P2765魔术球问题(网络流24题)
题目链接 解题思路: 这题题目看起来根本不像网络流但是确实用网络流做的 这个题目有两个限制 每个柱子上面的球相邻两个的和必须是平方数 球的编号必须是连续的 首先我们只考虑第一个条件的话,我们怎么转化成 ...
- 【网络流24题】解题报告:K、航空路线问题(最小费用最大流)
[问题分析] 求最长两条不相交路径,用最大费用最大流解决. [建模方法] 把第i个城市拆分成两个顶点<i.a>,<i.b>. 1.对于每个城市i,连接(<i.a>, ...
最新文章
- 深度分享 | 世界顶级语音识别科学家黄学东博士CCL 2018主旨报告(附PPT)
- AIDL 客户端与服务端的双向通信
- html百度地图中心点不正确,百度地图嵌入弹出层,无法准确正确显示marker标记到中心位置的问题...
- Tomcat启动窗口
- Oracle数据库之集合运算
- Java面向对象编程篇4——内部类
- 《FPGA 应用开发入门与典型实例》(修订版)
- perl语言十分钟入门【零基础可入】
- 怎么实现两周联动加减速_猎魂觉醒与仁王开启联动,猎魂觉醒团队还与“仁王”制作人聊了聊...
- mobi格式转换成pdf格式
- snm算法_基于SNM算法的大数据量中文地址清洗方法
- 基于多源传感器融合的导航定位综述方法分析
- Stata:回归结果中不报告行业虚拟变量的系数
- 3D目标检测/点云/遥感数据集汇总
- 电影光盘的vob格式视频如何转换成mp4格式
- qq系统软件测试计划,软件测试设计报告案例——qq空间.doc
- 基于微信小程序小说图书商城管理系统(微信小程序毕业设计)
- 计算机无法识别u盘,详解电脑不识别u盘
- dual功能计算机,dual是什么意思车上的-功能介绍须知
- HTML Input输入框自定义required的提示内容(默认值:请填写此字段)
热门文章
- CANopen总线的高级协议详解
- 分治法——循环赛事日程表
- win10/win11快速隐藏/显示桌面图标快捷方式
- 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。...
- 计算机视觉外语论文翻译,图像处理-毕设论文外文翻译(翻译+原文)
- 百度爱番番实时CDP建设实践
- 小程序画布合成二维码海报图,并保存到相册
- win7防火墙开启ping
- ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operat
- SAP 小币种金额的转换函数和处理