Spfa费用流模板
- const int INF=;
- const int maxn=,maxm=;
- int cnt=,fir[maxn],nxt[maxm],to[maxm];
- int cap[maxm],val[maxm],dis[maxn],path[maxn];
- void add(int a,int b,int c,int v){
- nxt[++cnt]=fir[a];to[cnt]=b;
- cap[cnt]=c;val[cnt]=v;fir[a]=cnt;
- }
- void addedge(int a,int b,int c,int v){
- add(a,b,c,v);
- add(b,a,,-v);
- }
- int S,T;
- int vis[maxn];
- int Spfa(){
- deque<int>q;
- memset(dis,,sizeof(dis));
- memset(vis,,sizeof(vis));
- q.push_front(S);
- dis[S]=;vis[S]=;
- while(!q.empty()){
- int x=q.front();q.pop_front();vis[x]=;
- for(int i=fir[x];i;i=nxt[i])
- if(cap[i]&&dis[x]+val[i]<dis[to[i]]){
- dis[to[i]]=val[i]+dis[x];
- path[to[i]]=i;
- if(vis[to[i]])continue;
- if(dis[to[i]]<dis[x])
- q.push_front(to[i]);
- else
- q.push_back(to[i]);
- vis[to[i]]=;
- }
- }
- return dis[T]==dis[T+]?:dis[T];
- }
- int Aug(){
- int p=T,f=INF;
- while(p!=S){
- f=min(f,cap[path[p]]);
- p=to[path[p]^];
- }
- p=T;
- while(p!=S){
- cap[path[p]]-=f;
- cap[path[p]^]+=f;
- p=to[path[p]^];
- }
- return f;
- }
- int MCMF(){
- int ret=,d;
- while(d=Spfa())
- ret+=Aug()*d;
- return ret;
- }
- #include <queue>
- using namespace std;
- const int maxn=;
- const int maxm=;
- const int INF=;
- int n,m,w[maxn],cnt,fir[maxn],to[maxm],nxt[maxm];
- int cap[maxm],val[maxm],path[maxn],vis[maxn],dis[maxn];
- queue<int>q;
- struct Net_Flow{
- Net_Flow(){cnt=;}
- void add(int a,int b,int c,int v){
- nxt[++cnt]=fir[a];cap[cnt]=c;
- to[cnt]=b;val[cnt]=v;fir[a]=cnt;
- }
- void addedge(int a,int b,int c,int v){
- add(a,b,c,v);add(b,a,,-v);
- }
- int Spfa(int S,int T){
- memset(dis,,sizeof(dis));
- q.push(S);vis[S]=;dis[S]=;
- while(!q.empty()){
- int x=q.front();q.pop();vis[x]=;
- for(int i=fir[x];i;i=nxt[i])
- if(cap[i]&&dis[to[i]]>dis[x]+val[i]){
- dis[to[i]]=dis[x]+val[i];
- if(!vis[to[i]])q.push(to[i]);
- vis[to[i]]=;path[to[i]]=i;
- }
- }
- return dis[T];
- }
- int Aug(int S,int T){
- int p=T,f=INF;
- while(p!=S){
- f=min(f,cap[path[p]]);
- p=to[path[p]^];
- }p=T;
- while(p!=S){
- cap[path[p]]-=f;
- cap[path[p]^]+=f;
- p=to[path[p]^];
- }
- return f;
- }
- int MCMF(int S,int T){
- int v=,d;
- while((d=Spfa(S,T))!=INF)
- v+=d*Aug(S,T);
- return v;
- }
- }mcmf;
Spfa费用流模板的更多相关文章
- HDU 6611 K Subsequence(Dijkstra优化费用流 模板)题解
题意: 有\(n\)个数\(a_1\cdots a_n\),现要你给出\(k\)个不相交的非降子序列,使得和最大. 思路: 费用流建图,每个点拆点,费用为\(-a[i]\),然后和源点连边,和后面非降 ...
- HDU2686 费用流 模板
Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 初识费用流 模板(spfa+slf优化) 餐巾计划问题
今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...
- hdu1533 费用流模板
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 费用流模板(带权二分图匹配)——hdu1533
/* 带权二分图匹配 用费用流求,增加源点s 和 汇点t */ #include<bits/stdc++.h> using namespace std; #define maxn 1000 ...
- 【费用流】【Next Array】费用流模板(spfa版)
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> using ...
- POJ 2175 spfa费用流消圈
题意:给出n栋房子位置和每栋房子里面的人数,m个避难所位置和每个避难所可容纳人数.然后给出一个方案,判断该方案是否最优,如果不是求出一个更优的方案. 思路:很容易想到用最小费用流求出最优时间,在与原方 ...
- 最长可重区间集 spfa费用流
给定实直线L上的n个开区间,和一个正整数k 选取若干个区间,在保证实直线L上的任意一个点最多被选出区间覆盖k次的情况下,使得这些区间的长度和最大 先把区间按照左端点排序, 考虑到重复其实就代表着相交, ...
- ZOJ 3362 Beer Problem(SPFA费用流应用)
Beer Problem Time Limit: 2 Seconds Memory Limit: 32768 KB Everyone knows that World Finals of A ...
随机推荐
- HDFS的Java客户端操作代码(查看HDFS下所有的文件存储位置信息)
1.查看HDFS下所有的文件存储位置信息 package Hdfs; import java.net.URI; import org.apache.hadoop.conf.Configuration; ...
- JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等
验证是否为数字:/^[0-9]*$/验证是否为汉字:/^[\u4e00-\u9fa5],{0,}$/验证x-y位的数字:/^\d{x,y}$/验证由26个英文字母组成的字符串:/^[A-Za-z]+$ ...
- List(列表)
List(列表): List的特征是其元素以线性方式存储,集合中可以存放重复对象. List接口主要实现类包括: ArrayList() : 代表长度可以改变得数组.可以对元素进行随机的访问,向Arr ...
- updatepanel局部刷新功能,实现注册时对用户名的检测
updatepanel的使用 通过将控件放入到updatepanel中,实现局部刷新. 前台代码:<asp:ScriptManager ID="ScriptManager1" ...
- c# 连接oracle 读取数据
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Gprinter Android SDK V1.0 使用说明
佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...
- spring-quartz普通任务与可传参任务
两者区别与作用: 普通任务:总调度(SchedulerFactoryBean)--> 定时调度器(CronTriggerFactoryBean) --> 调度明细自定义执行方法bean(M ...
- IOS DLNA开发(CyberLink和PlatinumKit)
1.CyberLink 和 PlatinumKit 两者的比较 CyberLink大概在2010年之后功能就没有更新,部分功能不够完善,网上有下载地址 http://www.pudn.com/down ...
- SGU 139.Help Needed!
题意: 判断15数码问题是否有解. 如果0的偏移量和逆序对个数同奇偶则无解. 因为目标状态的偏移量为0,逆序对为15,而0移动的时候偏移量±1,逆序对的改变量为也为奇数. 这就使得偏移量和逆序对数始终 ...
- 24种设计模式--代理模式【Proxy Pattern】
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀. ...