其实本来打算做最小费用最大流的题目前先来点模板题的,,,结果看到这道题二话不说(之前打太多了)敲了一个dinic,快写完了发现不对

我当时就这表情→   =_=你TM逗我

刚要删突然感觉dinic的模板中的bfs就相当于找每天边的权都为1的图上的最短路,稍稍改一下就能变成spfa,于是重新写了一下,但是函数名还是bfs。。。

然后又发现不对,最后要返回路径的,dfs也要改= =结果变成了非递归,但是函数名还是dfs。。。

于是一个看似是dinic,实则垃圾得不行的最小费用最大流就敲完了

然后调了一小会儿,最后发现我把入点和入点连了起来。。。难怪每次算出来都是直接飞

  1. #include <cstdio>
  2. #include <iostream>
  3. #define INF 2147483647
  4. using namespace std;
  5. int n,m,N=,ans=,x,y,z,h,t,i,minflow,now;
  6. int fir[],nex[],to[],flo[],cost[],d[],l[],father[];
  7. bool que[];
  8. inline void add(int a,int b,int c,int d){ nex[++N]=fir[a];fir[a]=N;to[N]=b;flo[N]=c;cost[N]=d;
  9. nex[++N]=fir[b];fir[b]=N;to[N]=a;flo[N]=;cost[N]=-d;}
  10. bool bfs()//其实是spfa
  11. {
  12. for(int i=;i<=n*+;i++) d[i]=INF;
  13. for(h=,t=,l[]=n*+,d[n*+]=;h<=t;h++)
  14. for (que[l[h]]=,i=fir[l[h]];i;i=nex[i])
  15. if(flo[i] && d[to[i]]>d[l[h]]+cost[i])
  16. {
  17. father[to[i]]=i;//注意father存的是边
  18. d[to[i]]=d[l[h]]+cost[i];
  19. if (!que[to[i]])
  20. l[++t]=to[i],que[to[i]]=;
  21. }
  22. return d[n*+]!=INF;
  23. }
  24.  
  25. void dfs()//其实写成了非递归
  26. {
  27. for(minflow=INF,now=n*+;now!=n*+;now=to[father[now]^])
  28. minflow=min(minflow,flo[father[now]]);
  29. for(now=n*+;now!=n*+;now=to[father[now]^])
  30. ans+=cost[father[now]],flo[father[now]]-=minflow,flo[father[now]^]+=minflow;
  31. }
  32.  
  33. int main()
  34. {
  35. scanf("%d%d",&n,&m);
  36. for (int i=;i<=n;i++)
  37. scanf("%d",&x),add(n*+,i+n,,x);
  38. for (int i=;i<=n;i++)
  39. add(n*+,i,,);
  40. for (int i=;i<=m;i++)
  41. scanf("%d%d%d",&x,&y,&z),add(min(x,y),max(x,y)+n,,z);
  42. for (int i=;i<=n;i++)
  43. add(i+n,n*+,,);
  44. while (bfs()) dfs();
  45. printf("%d\n",ans);
  46. return ;
  47. }

bzoj1927最小费用最大流的更多相关文章

  1. BZOJ1927: [Sdoi2010]星际竞速(最小费用最大流 最小路径覆盖)

    题意 题目链接 Sol 看完题不难想到最小路径覆盖,但是带权的咋做啊?qwqqq 首先冷静思考一下:最小路径覆盖 = \(n - \text{二分图最大匹配数}\) 为什么呢?首先最坏情况下是用\(n ...

  2. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  3. ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)

    将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...

  4. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  5. P3381 【模板】最小费用最大流

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...

  6. 【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用最大流)

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 821  Solved: 502[Submit][Status ...

  7. hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***

    题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙,          每个逮捕队伍在每个城市可以选 ...

  8. UVa11082 Matrix Decompressing(最小费用最大流)

    题目大概有一个n*m的矩阵,已知各行所有数的和的前缀和和各列所有数的和的前缀和,且矩阵各个数都在1到20的范围内,求该矩阵的一个可能的情况. POJ2396的弱化版本吧..建图的关键在于: 把行.列看 ...

  9. UVa12092 Paint the Roads(最小费用最大流)

    题目大概说一个n个点m条带权有向边的图,要给边染色,染色的边形成若干个回路且每个点都恰好属于其中k个回路.问最少要染多少边权和的路. 一个回路里面各个点的入度=出度=1,那么可以猜想知道各个点如果都恰 ...

随机推荐

  1. STL~heap

    1.定义 堆:若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树 树中任一非叶子结点的关键字均不大于(或不小于)其子结点的关键字.分为大根数(默认 ...

  2. 页面解耦—— 统跳协议和Rewrite引擎

    原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...

  3. excel 2010 学习笔记一 Vlookup 函数的使用

    有这么一句话说的好:在商用场合里,能证明你会基本的EXCEL操作技巧的两个检查标准就是会不会用VLOOKUP函数以及数据透视表功能,那么今天就来总结一下VLOOKUP的一些简单实用的功能. 1.VLO ...

  4. php 路径

    //魔术变量,获取当前文件的绝对路径 echo "__FILE__: ========> ".__FILE__; echo '<br/>'; //魔术变量,获取当 ...

  5. Java中关于String类型的10个问题

    1. 如何比较两个字符串?用“=”还是equals 简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等.只要你想检测俩字符串是不是相等 ...

  6. airflow 部署

    环境 : ubuntu 14.04 LTS python 2.7 script: 设置环境变量: export AIRFLOW_HOME=~/airflow 安装相关依赖包: sudo apt-get ...

  7. C# 程序异常管理方案

    C# 程序异常管理方案 1.程序出现未处理异常(程序中未捕获异常.添加异常处理) 2.程序添加全局异常捕获 tip:程序已处理异常不在捕获范围内. /// <summary> /// 应用 ...

  8. LocalDB 静默安装

    cmd命令:msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES 注意:需要以管理员身份运行

  9. [原创]Windows Server 2003 物理机转换为VMware虚拟机出现VSS错误的处理

    一台Windows Server 2003 物理机需要转换为VMware虚拟机,工具为Vmware vCenter Converter Standalone 6.0,转换开始就出现错误“FAILED: ...

  10. jQuery checkbox的全选与反选

    1:checkbox的全选与反选 js 代码 $("#cbAll").click(function(){ if($("#cbAll").is(":ch ...