zkw费用流
期末结束,竞赛生活继续开始,先怒刷完寒假作业再说
至于期末考试,数学跪惨,各种哦智障错,还有我初中常用的建系大法居然被自己抛至脑后,看来学的还是不扎实,以后数学要老老实实学。物理被永哥黑了两分,然后很庆幸自己计算题没错,化学又犯了看A选C的毛病,但就算这不算也考的很不理想,归结下来是因为做题速度太慢,需要在寒假练习速度与正确性(化学二卷正确率还是可以的,哈哈哈),英语因为没时间写作文,导致作文得了七分(哭死),而且智障课内完型还错了,原因是图卡时候速度太快,完型最后两题两个D写连起来了,导致填成了两个B。。。生物我已经知足了,但是智障与审题还是丢了分。这回比八班总班平高了6分,虽然感觉自己很虚,但面对成绩还是可以的,慢慢进步吧。
然后刚学了zkw费用流,这个与普通费用流算法的区别就在于spfa的时候是从汇点到源点做spfa,好像这样能剪一剪枝,排除从源点分出的一些无用的分叉,还有找增广路时是一次找一大坨,类似dinic,下面贴代码:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
typedef long long LL;
inline int read()
{
,f=;char c=getchar();
;c=getchar();}
+c-';c=getchar();}
return x*f;
}
;
;
int first[maxn],n,m,vis[maxn],dis[maxn],a,b,c,d,ans;
queue <int> Q;
struct Edge
{
int u,v,f,w,next;
Edge() {}
Edge(int _1,int _2,int _3,int _4,int _5) : u(_1),v(_2),f(_3),w(_4),next(_5) {}
}e[maxn];
void addEdge(int i,int a,int b,int c,int d)
{
e[i]=Edge(a,b,c,d,first[a]);
first[a]=i;
}
bool spfa()
{
memset(vis,,sizeof(vis));
;i<=n;i++)dis[i]=oo;
while(Q.size())Q.pop();
dis[n]=;vis[n]=;Q.push(n);
while(Q.size())
{
int now=Q.front();Q.pop();
;i=e[i].next)
].f && dis[now]+e[i^].w<dis[e[i].v])
{
dis[e[i].v]=dis[now]+e[i^].w;
if(!vis[e[i].v])
{
vis[e[i].v]=;
Q.push(e[i].v);
}
}
vis[now]=;
}
]!=oo;
}
int dfs(int x,int flow)
{
vis[x]=;
if(x==n)return flow;
;
;i=e[i].next)
if(dis[e[i].v]==dis[x]-e[i].w && e[i].f && !vis[e[i].v])
{
now=flow-used;
now=dfs(e[i].v,min(now,e[i].f));
ans+=now*e[i].w;
e[i].f-=now; e[i^].f+=now;
used+=now;
if(used==flow)return flow;
}
return used;
}
void zkw()
{
while(spfa())
{
vis[n]=;
while(vis[n])
{
memset(vis,,sizeof(vis));
dfs(,oo);
}
}
}
int main()
{
memset(first,-,sizeof(first));
n=read();m=read();
;i<m;i++)
{
a=read();b=read();c=read();d=read();
addEdge(*i,a,b,c,d);
addEdge(*i+,b,a,,-d);
}
zkw();
printf("%d",ans);
;
}
明天就要冬令营了,加油啊!!
zkw费用流的更多相关文章
- zkw费用流+当前弧优化
zkw费用流+当前弧优化 var o,v:..] of boolean; f,s,d,dis:..] of longint; next,p,c,w:..] of longint; i,j,k,l,y, ...
- 学习了ZKW费用流
所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^ ...
- 【zkw费用流】[网络流24题]餐巾计划问题
题目描述 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f ...
- CSU 1948: 超级管理员(普通费用流&&zkw费用流)
Description 长者对小明施加了膜法,使得小明每天起床就像马丁的早晨一样. 今天小明早上醒来发现自己成了一位仓管员.仓库可以被描述为一个n × m的网格,在每个网格上有几个箱子(可能没有).为 ...
- BZOJ2673 [Wf2011]Chips Challenge 费用流 zkw费用流 网络流
https://darkbzoj.cf/problem/2673 有一个芯片,芯片上有N*N(1≤N≤40)个插槽,可以在里面装零件. 有些插槽不能装零件,有些插槽必须装零件,剩下的插槽随意. 要求装 ...
- 图论-zkw费用流
图论-zkw费用流 模板 这是一个求最小费用最大流的算法,因为发明者是神仙zkw,所以叫zkw费用流(就是zkw线段树那个zkw).有些时候比EK快,有些时候慢一些,没有比普通费用流算法更难,所以学z ...
- zkw费用流 学习笔记
分析 记\(D_i\)为从\(S\)出发到\(i\)的最短路 最短路算法保证, 算法结束时 对于任意存在弧\((i,j)\)满足\(D_i + c_{ij}\ge D_j\) ① 且对于每个 \(j\ ...
- P4015 运输问题【zkw费用流】
输入输出样例 输入 #1复制 2 3 220 280 170 120 210 77 39 105 150 186 122 输出 #1复制 48500 69140zuixiaofeiyo 说明/提示 1 ...
- HDU 4744 Starloop System(ZKW费用流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4744 题意:三维空间n个点,每个点有一个wi值.每对点的距离定义为floor(欧拉距离),每对点之间建 ...
随机推荐
- stata
1.只打开部分变量: use var1 var2 using "C:\data\2014.dta" 2.打开部分样本(5~10个样本) use "C:\data\2014 ...
- 如何优雅的设计Redux中的Store
用了几个月的redux,现在回过来总结一下. 刚开始用的时候遇到一个比较大的疑问,就是如何设计redux的store中的state树,这应该是我在使用redux中最大的一个疑问,阻挡了我前进的脚步,当 ...
- 【终极】Dynamic Web Module 3.0 requires Java 1.6 or newer
今天在用maven+ssm做项目的时候,右键项目properities设置project facet,勾选dynamic WEB module时一直勾不上,网上找了很多教程都不行, 有说在pom.xm ...
- 微信内嵌H5网页 解决js倒计时失效
项目要求:将H5商城页面嵌套到公司微信公众号里 项目本身的开发跟移动端网页并无太多差异,只是这昨天遇到一个问题,说是棘手,到也简单. 用户下单后,在选择支付方式页面,有个倒计时的逻辑(从下单时开始计算 ...
- TortoiseSVN历史版本安装及svn服务器搭建
一.TortoiseSVN安装 1.TortoiseSVN下载 网址如下:https://tortoisesvn.net/downloads.html 进入客户端下载页面,根据你的电脑选择是64位 ...
- js判断移动端与pc端
这里介绍下使用device.js插件来判断移动端设备 地址:https://github.com/matthewhudson/device.js 示例: if(device.mobile()){ wi ...
- leetcode 024
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- 64位win7系统中vb工程显示加载MSCOMCTL.OCX失败
MSCOMCTL.OCX明明已经注册成功,但还是提示加载失败,对象未注册 尝试过的方法:system32中注册,syswow64中注册,vb打sp6补丁, 修改工程文件:用记事本打开VBP文件找到这一 ...
- memcache学习和分析
Memcached 特点• 具有非常快的处理速度• 缺乏认证以及安全管制,应将其放置在防火墙之后• 重启后数据全部丢失• 可以给数据设置有效期• 适合使用大量低CPU的机器搭建集群• 各节点之间各自独 ...
- 如何运用xp_cmdshell 执行多行cmd命令
因为需要利用sql 脚本调用外部程序,所以尝试xp_cmdshell 命令,发现其默认只能执行一行命令,最后找到了下面方法: 将多行cmd 命令处理成bat文件,然后直接利用所在路径+文件来执行: ...