题意:有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(网络流)相关推荐

  1. 网络流24题(1) P2756 飞行员配对方案问题

    题目链接 题意:求一个最大的二分匹配,网络流最大流,自己造一个源点一个汇点,源点0到1~m流为1,m+1~n到汇点n+1流为1,然后就是题目给出的也是流为1,图就是这样的,套dinic一个板子,但是题 ...

  2. 【网络流24题】最小路径覆盖问题

    [题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...

  3. 网络流—Edmonds-Karp 最短增广路算法(最大流)

    网络流----Edmonds-Karp 最短增广路算法 ■求最大流的过程,就是不断找到一条源到汇的路径,然后构建残余网络,再在残余网络上寻找新的路径,使总流量增加,然后形成新的残余网络,再寻找新路径- ...

  4. [BZOJ2502]清理雪道 有上下界网络流(最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有 ...

  5. poj1273(最大网络流问题模版)

    网络流才学习,还是不怎么懂,一开始都是看网上写的算法模版,下面的两种方法也是用了网上的模版的: 方法一: #include <iostream> #include<algorithm ...

  6. 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流

    题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...

  7. 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流

    学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...

  8. 最大流 ---- 最小路径覆盖 ---- P2765魔术球问题(网络流24题)

    题目链接 解题思路: 这题题目看起来根本不像网络流但是确实用网络流做的 这个题目有两个限制 每个柱子上面的球相邻两个的和必须是平方数 球的编号必须是连续的 首先我们只考虑第一个条件的话,我们怎么转化成 ...

  9. 【网络流24题】解题报告:K、航空路线问题(最小费用最大流)

    [问题分析] 求最长两条不相交路径,用最大费用最大流解决. [建模方法] 把第i个城市拆分成两个顶点<i.a>,<i.b>. 1.对于每个城市i,连接(<i.a>, ...

最新文章

  1. 深度分享 | 世界顶级语音识别科学家黄学东博士CCL 2018主旨报告(附PPT)
  2. AIDL 客户端与服务端的双向通信
  3. html百度地图中心点不正确,百度地图嵌入弹出层,无法准确正确显示marker标记到中心位置的问题...
  4. Tomcat启动窗口
  5. Oracle数据库之集合运算
  6. Java面向对象编程篇4——内部类
  7. 《FPGA 应用开发入门与典型实例》(修订版)
  8. perl语言十分钟入门【零基础可入】
  9. 怎么实现两周联动加减速_猎魂觉醒与仁王开启联动,猎魂觉醒团队还与“仁王”制作人聊了聊...
  10. mobi格式转换成pdf格式
  11. snm算法_基于SNM算法的大数据量中文地址清洗方法
  12. 基于多源传感器融合的导航定位综述方法分析
  13. Stata:回归结果中不报告行业虚拟变量的系数
  14. 3D目标检测/点云/遥感数据集汇总
  15. 电影光盘的vob格式视频如何转换成mp4格式
  16. qq系统软件测试计划,软件测试设计报告案例——qq空间.doc
  17. 基于微信小程序小说图书商城管理系统(微信小程序毕业设计)
  18. 计算机无法识别u盘,详解电脑不识别u盘
  19. dual功能计算机,dual是什么意思车上的-功能介绍须知
  20. HTML Input输入框自定义required的提示内容(默认值:请填写此字段)

热门文章

  1. CANopen总线的高级协议详解
  2. 分治法——循环赛事日程表
  3. win10/win11快速隐藏/显示桌面图标快捷方式
  4. 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。...
  5. 计算机视觉外语论文翻译,图像处理-毕设论文外文翻译(翻译+原文)
  6. 百度爱番番实时CDP建设实践
  7. 小程序画布合成二维码海报图,并保存到相册
  8. win7防火墙开启ping
  9. ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operat
  10. SAP 小币种金额的转换函数和处理