bzoj1927最小费用最大流
其实本来打算做最小费用最大流的题目前先来点模板题的,,,结果看到这道题二话不说(之前打太多了)敲了一个dinic,快写完了发现不对
我当时就这表情→ =_=你TM逗我
刚要删突然感觉dinic的模板中的bfs就相当于找每天边的权都为1的图上的最短路,稍稍改一下就能变成spfa,于是重新写了一下,但是函数名还是bfs。。。
然后又发现不对,最后要返回路径的,dfs也要改= =结果变成了非递归,但是函数名还是dfs。。。
于是一个看似是dinic,实则垃圾得不行的最小费用最大流就敲完了
然后调了一小会儿,最后发现我把入点和入点连了起来。。。难怪每次算出来都是直接飞
- #include <cstdio>
- #include <iostream>
- #define INF 2147483647
- using namespace std;
- int n,m,N=,ans=,x,y,z,h,t,i,minflow,now;
- int fir[],nex[],to[],flo[],cost[],d[],l[],father[];
- bool que[];
- 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;
- nex[++N]=fir[b];fir[b]=N;to[N]=a;flo[N]=;cost[N]=-d;}
- bool bfs()//其实是spfa
- {
- for(int i=;i<=n*+;i++) d[i]=INF;
- for(h=,t=,l[]=n*+,d[n*+]=;h<=t;h++)
- for (que[l[h]]=,i=fir[l[h]];i;i=nex[i])
- if(flo[i] && d[to[i]]>d[l[h]]+cost[i])
- {
- father[to[i]]=i;//注意father存的是边
- d[to[i]]=d[l[h]]+cost[i];
- if (!que[to[i]])
- l[++t]=to[i],que[to[i]]=;
- }
- return d[n*+]!=INF;
- }
- void dfs()//其实写成了非递归
- {
- for(minflow=INF,now=n*+;now!=n*+;now=to[father[now]^])
- minflow=min(minflow,flo[father[now]]);
- for(now=n*+;now!=n*+;now=to[father[now]^])
- ans+=cost[father[now]],flo[father[now]]-=minflow,flo[father[now]^]+=minflow;
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for (int i=;i<=n;i++)
- scanf("%d",&x),add(n*+,i+n,,x);
- for (int i=;i<=n;i++)
- add(n*+,i,,);
- for (int i=;i<=m;i++)
- scanf("%d%d%d",&x,&y,&z),add(min(x,y),max(x,y)+n,,z);
- for (int i=;i<=n;i++)
- add(i+n,n*+,,);
- while (bfs()) dfs();
- printf("%d\n",ans);
- return ;
- }
bzoj1927最小费用最大流的更多相关文章
- BZOJ1927: [Sdoi2010]星际竞速(最小费用最大流 最小路径覆盖)
题意 题目链接 Sol 看完题不难想到最小路径覆盖,但是带权的咋做啊?qwqqq 首先冷静思考一下:最小路径覆盖 = \(n - \text{二分图最大匹配数}\) 为什么呢?首先最坏情况下是用\(n ...
- [板子]最小费用最大流(Dijkstra增广)
最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...
- ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)
将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...
- HDU5900 QSC and Master(区间DP + 最小费用最大流)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...
- P3381 【模板】最小费用最大流
P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...
- 【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用最大流)
3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 821 Solved: 502[Submit][Status ...
- hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***
题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙, 每个逮捕队伍在每个城市可以选 ...
- UVa11082 Matrix Decompressing(最小费用最大流)
题目大概有一个n*m的矩阵,已知各行所有数的和的前缀和和各列所有数的和的前缀和,且矩阵各个数都在1到20的范围内,求该矩阵的一个可能的情况. POJ2396的弱化版本吧..建图的关键在于: 把行.列看 ...
- UVa12092 Paint the Roads(最小费用最大流)
题目大概说一个n个点m条带权有向边的图,要给边染色,染色的边形成若干个回路且每个点都恰好属于其中k个回路.问最少要染多少边权和的路. 一个回路里面各个点的入度=出度=1,那么可以猜想知道各个点如果都恰 ...
随机推荐
- STL~heap
1.定义 堆:若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树 树中任一非叶子结点的关键字均不大于(或不小于)其子结点的关键字.分为大根数(默认 ...
- 页面解耦—— 统跳协议和Rewrite引擎
原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...
- excel 2010 学习笔记一 Vlookup 函数的使用
有这么一句话说的好:在商用场合里,能证明你会基本的EXCEL操作技巧的两个检查标准就是会不会用VLOOKUP函数以及数据透视表功能,那么今天就来总结一下VLOOKUP的一些简单实用的功能. 1.VLO ...
- php 路径
//魔术变量,获取当前文件的绝对路径 echo "__FILE__: ========> ".__FILE__; echo '<br/>'; //魔术变量,获取当 ...
- Java中关于String类型的10个问题
1. 如何比较两个字符串?用“=”还是equals 简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等.只要你想检测俩字符串是不是相等 ...
- airflow 部署
环境 : ubuntu 14.04 LTS python 2.7 script: 设置环境变量: export AIRFLOW_HOME=~/airflow 安装相关依赖包: sudo apt-get ...
- C# 程序异常管理方案
C# 程序异常管理方案 1.程序出现未处理异常(程序中未捕获异常.添加异常处理) 2.程序添加全局异常捕获 tip:程序已处理异常不在捕获范围内. /// <summary> /// 应用 ...
- LocalDB 静默安装
cmd命令:msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES 注意:需要以管理员身份运行
- [原创]Windows Server 2003 物理机转换为VMware虚拟机出现VSS错误的处理
一台Windows Server 2003 物理机需要转换为VMware虚拟机,工具为Vmware vCenter Converter Standalone 6.0,转换开始就出现错误“FAILED: ...
- jQuery checkbox的全选与反选
1:checkbox的全选与反选 js 代码 $("#cbAll").click(function(){ if($("#cbAll").is(":ch ...