题目链接:http://poj.org/problem?id=3436

大力套kuangbin板过了orz

#include<cstdio>
#include<cstring>
using namespace std;const int MAXN = 210;
const int MAXM = 40010;
const int INF = 0x3f3f3f3f;
struct Edge
{int to,next,cap,flow;
} edge[MAXM];
int tol;
int head[MAXN];
int gap[MAXN],dep[MAXN],pre[MAXN],cur[MAXN];
void init()
{tol = 0;memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int w,int rw=0)
{edge[tol].to = v;edge[tol].cap = w;edge[tol].next = head[u];edge[tol].flow = 0;head[u] = tol++;edge[tol].to = u;edge[tol].cap = rw;edge[tol].next = head[v];edge[tol].flow = 0;head[v]=tol++;
}
int sap(int start,int end,int N)
{memset(gap,0,sizeof(gap));memset(dep,0,sizeof(dep));memcpy(cur,head,sizeof(head));int u = start;pre[u] = -1;gap[0] = N;int ans = 0;while(dep[start] < N){if(u == end){int Min = INF;for(int i = pre[u]; i != -1; i = pre[edge[i^1].to])if(Min > edge[i].cap - edge[i].flow)Min = edge[i].cap - edge[i].flow;for(int i = pre[u]; i != -1; i = pre[edge[i^1].to]){edge[i].flow += Min;edge[i^1].flow -= Min;}u = start;ans += Min;continue;}bool flag = false;int v;for(int i = cur[u]; i != -1; i = edge[i].next){v = edge[i].to;if(edge[i].cap - edge[i].flow && dep[v]+1 == dep[u]){flag = true;cur[u] = pre[v] = i;break;}}if(flag){u = v;continue;}int Min = N;for(int i = head[u]; i != -1; i = edge[i].next)if(edge[i].cap - edge[i].flow && dep[edge[i].to] < Min){Min = dep[edge[i].to];cur[u] = i;}gap[dep[u]]--;if(!gap[dep[u]])return ans;dep[u] = Min+1;gap[dep[u]]++;if(u != start) u = edge[pre[u]^1].to;}return ans;
}int P;bool jr(int out,int in)
{for (int i=0; i<P; i++){int tout=out%3;int tin=in%3;if (tout==0 && tin==1 || tout==1 && tin==0) return false;out/=3;in/=3;}return true;
}int input[MAXN],output[MAXN];
int ef[MAXN];int main()
{init();int n;scanf("%d%d",&P,&n);for (int i=0; i<n; i++){scanf("%d",&ef[i]);int tout=0,tin=0;for (int j=0; j<P; j++){int x;scanf("%d",&x);tin=tin*3+x;}for (int j=0; j<P; j++){int x;scanf("%d",&x);tout=tout*3+x;}input[i]=tin;output[i]=tout;}output[n]=0;input[n+1]=0;for (int j=0; j<P; j++) input[n+1]=input[n+1]*3+1;for (int i=0;i<n;i++) addedge(i,i+n,ef[i]);for (int i=0; i<n; i++)for (int j=0; j<n; j++){if (jr(output[i],input[j])){addedge(i+n,j,ef[i]);}}for (int i=0; i<n; i++) if (jr(output[n],input[i])) addedge(n+n,i,INF);for (int i=0; i<n; i++) if (jr(output[i],input[n+1])) addedge(i+n,n+n+1,ef[i]);printf("%d ",sap(n+n,n+n+1,n+n+2));int cnt=0;for (int i=0;i<n;i++){for (int j=head[i+n];j!=-1;j=edge[j].next){if (edge[j].flow>0 && edge[j].to>=0 && edge[j].to<n) cnt++;}}printf("%d\n",cnt);for (int i=0;i<n;i++){for (int j=head[i+n];j!=-1;j=edge[j].next){if (edge[j].flow>0 && edge[j].to>=0 && edge[j].to<n) printf("%d %d %d\n",i+1,edge[j].to+1,edge[j].flow);}}return 0;
}

转载于:https://www.cnblogs.com/acmsong/p/7460917.html

[poj 3436]最大流+输出结果每条边流量相关推荐

  1. poj 3436 (最大流)

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

  2. mysql pdo 查询一条数据_pdo mysql怎么输出第1条 第4条 第7条数据

    pdo mysql怎么输出第1条 第4条 第7条数据.. 下面是输出全部数据.. query($sql1); while($row = $rs -> fetch()) { echo' '.$ro ...

  3. java BASE64流 输出图片。

    java BASE64流 输出图片. 亲测3个请求都可用,没有测试性能问题.仅供参考 BASE64Decoder Eclipsse 类可能引用不了解决方案链接:http://blog.csdn.net ...

  4. 将ostream 对象转换成字符串流输出

    将ostream 对象转换成字符串流输出 因为项目中需要获取控制台程序的输出结果.所以必须把stream 捕获. #include <strstream> #include <ost ...

  5. deepstream c++ rtsp流输出

    deepstream c++ rtsp流输出 deepstream 的中文资料太少,官方示例没有给出rtsp输出的简单示例,只是建议参考deepstream_sink_bin.c去实现,折腾了半天,整 ...

  6. 升压型 串联LED 背光恒流输出的驱动芯片

    AP9235B 系列是一款固定振荡频率.恒流输出的 升压型DC/DC转换器,非常适合于移动电话.PDA. 数码相机等电子产品的背光驱动.输出电压可达 23V ,3.2V输入电压可以驱动六个串联LED, ...

  7. Java实现Excel下载,excel文件流输出到浏览器

    关于实现Excel下载,我使用的是easypoi, easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导 ...

  8. 输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和

    按如下函数原型编写程序,输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和. void InputMatrix(int a[N][N], int n); int AddDiagonal( ...

  9. LiveNVR配置拉转RTSP传统海康大华安防摄像机直播流输出RTSP/RTMP/HLS/HTTP-FLV如何获取直播流地址

    LiveNVR配置拉转RTSP传统海康大华安防摄像机直播流输出RTSP/RTMP/HLS/HTTP-FLV如何获取直播流地址 1. Onvif/RTSP流媒体服务 2.配置拉转直播流 2.1 RTSP ...

最新文章

  1. 放弃深圳1.5万月薪,我准备回农村了!
  2. 程序员失业第一步?斯坦福研究员用AI从编译器反馈中学习改Bug
  3. 【一个实体对象不能由多个 IEntityChangeTracker 实例引用】原因及解决方法
  4. OpenCV, 名校机器学习相关课程
  5. Ubuntu 安装 Tomcat 7.0.40
  6. SAP License:老板都不懂ERP,怎么会用得好ERP呢?
  7. CSS Flex-box示例代码
  8. DNG格式转换器:​Adobe DNG Converter for Mac支持m1中文版
  9. C# 访问 带密码的access数据库
  10. ppapi获取html,在HTML中给PPAPI插件配置参数
  11. ElementUI表单构建
  12. 禁止用户修改计算机的桌面背景,win10系统禁止用户修改桌面壁纸的设置方法
  13. NameCheap域名和Amazon EC2
  14. 微信小程序退出按钮退出方式
  15. 色 彩 RGB 值 对 照 表
  16. Oracle 存储过程中自定义异常
  17. MySQL燕十八老师课程笔记:第九课:having筛选
  18. 云服务器配置emqx时,mqtt启动成功,但emqx_ctl start显示Node ‘emqx@127.0.0.1‘ not responding to pings.
  19. 《数学建模》之层次分析法
  20. Everything使用详解

热门文章

  1. java word另存为_Java 网页html转为word并保存为doc文件
  2. html5语音读取文字_文字识别神器最新版-文字识别神器安卓版下载
  3. @Inner使用及原理
  4. Java枚举类型的用法
  5. acfun html5 转换,AcFun剧场模式插件
  6. 知识总结和记录——递归
  7. 每天一道博弈论之“巴什博弈”
  8. SQL SERVER 2000安装教程图文详解
  9. Linux shell的条件判断、循环语句及实例
  10. ETHREAD APC 《寒江独钓》内核学习笔记(4)