传送门:Island Transport

题意:有N个岛屿 M条无向路 每个路有一最大允许的客流量,求从最西的那个岛屿最多能运用多少乘客到最东的那个岛屿。

分析:无向图正反都加弧,权值一样,这题点多,使用SAP优势大,点少时dinic好些。

dinic:8314ms

#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <limits.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 100010
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
inline int read()
{char ch=getchar();int x=0,f=1;while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int n,m,vs,vt,tot;
int pre[N],q[N],cur[N],h[N];
struct edge
{int v,w,next;edge(){}edge(int v,int w,int next):v(v),w(w),next(next){}
}e[N<<1];
void addedge(int u,int v,int w)
{e[tot]=edge(v,w,pre[u]);pre[u]=tot++;e[tot]=edge(u,w,pre[v]);pre[v]=tot++;
}
void init()
{memset(pre,-1,sizeof(pre));tot=0;
}
/*******************dinic************************/
int bfs()
{int head=0,tail=1;memset(h,-1,sizeof(h));q[0]=vs;h[vs]=0;while(head!=tail){int u=q[head++];for(int i=pre[u];~i;i=e[i].next){int v=e[i].v,w=e[i].w;if(w&&h[v]==-1){h[v]=h[u]+1;q[tail++]=v;}}}return h[vt]!=-1;
}
int dfs(int u,int flow)
{if(u==vt)return flow;int used=0;for(int i=cur[u];~i;i=e[i].next){int v=e[i].v,w=e[i].w;if(h[v]==h[u]+1){w=dfs(v,min(flow-used,w));e[i].w-=w;e[i^1].w+=w;if(e[i].w)cur[u]=i;used+=w;if(used==flow)return flow;}}if(!used)h[u]=-1;return used;
}
int dinic()
{int res=0;while(bfs()){for(int i=1;i<=n;i++)cur[i]=pre[i];res+=dfs(vs,inf);}return res;
}
/********************dinic***********************/
void build()
{int u,v,w;int mx=-inf,mn=inf;n=read();m=read();for(int i=1;i<=n;i++){u=read();v=read();if(u<mn)mn=u,vs=i;if(u>mx)mx=u,vt=i;}for(int i=1;i<=m;i++){u=read();v=read();w=read();addedge(u,v,w);}
}
int main()
{int T;T=read();while(T--){init();build();printf("%d\n",dinic());}
}

View Code

SAP:2917ms

#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <limits.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 100010
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
inline int read()
{char ch=getchar();int x=0,f=1;while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int n,m,vs,vt,tot,NV;
int head[N],gap[N],level[N],q[N];
struct edge
{int v,w,next;edge(){}edge(int v,int w,int next):v(v),w(w),next(next){}
}e[N<<1];
void addedge(int u,int v,int w)
{e[tot]=edge(v,w,head[u]);head[u]=tot++;e[tot]=edge(u,w,head[v]);head[v]=tot++;
}
void init()
{memset(head,-1,sizeof(head));tot=0;
}
/***************************SAP***********************/
void bfs(int vt)
{memset(level,-1,sizeof(level));memset(gap,0,sizeof(gap));level[vt]=0;gap[level[vt]]++;queue<int>que;que.push(vt);while(!que.empty()) {int u=que.front();que.pop();for(int i=head[u]; i!=-1; i=e[i].next) {int v=e[i].v;if(level[v]!=-1)continue;level[v]=level[u]+1;gap[level[v]]++;que.push(v);}}
}
int pre[N];
int cur[N];
int SAP()
{bfs(vt);memset(pre,-1,sizeof(pre));memcpy(cur,head,sizeof(head));int u=pre[vs]=vs,flow=0,aug=inf;gap[0]=NV;while(level[vs]<NV) {bool flag=false;for(int &i=cur[u]; i!=-1; i=e[i].next) {int v=e[i].v;if(e[i].w&&level[u]==level[v]+1) {flag=true;pre[v]=u;u=v;aug=min(aug,e[i].w);if(v==vt) {flow+=aug;for(u=pre[v]; v!=vs; v=u,u=pre[u]) {e[cur[u]].w-=aug;e[cur[u]^1].w+=aug;}aug=inf;}break;}}if(flag)continue;int minlevel=NV;for(int i=head[u]; i!=-1; i=e[i].next) {int v=e[i].v;if(e[i].w&&level[v]<minlevel) {minlevel=level[v];cur[u]=i;}}if(--gap[level[u]]==0)break;level[u]=minlevel+1;gap[level[u]]++;u=pre[u];}return flow;
}
/**************************SAP**********************/
void build()
{int u,v,w;int mx=-inf,mn=inf;n=read();m=read();NV=n+1;for(int i=1;i<=n;i++){u=read();v=read();if(u<mn)mn=u,vs=i;if(u>mx)mx=u,vt=i;}for(int i=1;i<=m;i++){u=read();v=read();w=read();addedge(u,v,w);}
}
int main()
{int T;T=read();while(T--){init();build();printf("%d\n",SAP());}
}

View Code

转载于:https://www.cnblogs.com/lienus/p/4294436.html

hdu4280(最大流)相关推荐

  1. hdu4280 最大流DINIC

    题意:       x最小的到x最大的点同一时间的最大运输量. 思路:       裸的最大流,不解释,注意一点,记得加上防爆栈. #pragma comment(linker, "/STA ...

  2. 网络流入门——算法模板,习题和解析

    最近一段时间再搞网络流,今天终于搞完了!!!!QAQ,好累呀. 首先是关于网络流的基础知识,这部分东西有点多,就不在这里说了,给几个有用的资源. 先推荐一下建图的博客:链式向前星,静态链表和邻接矩阵建 ...

  3. hdu4280 Island Transport 网络流最大流 Dinic算法高效模板

    Island Transport In the vast waters far far away, there are many islands. People are living on the i ...

  4. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  5. 如何判断飞机的年限_技术流带你鉴定前风挡玻璃更换,不再使用日期判断!

    ​ 这又是一篇关于前风挡玻璃鉴定的文章,我记得在二手车鉴定微信公众号里面已经发布好几篇这样的文章了,当然每篇文章的住重点不同,今天这一篇应该是完结篇,它们在一起能组成一套玻璃更换系列专题课程: 我们回 ...

  6. SpringCloud Alibaba微服务实战(五) - Sentinel实现限流熔断

    什么是Sentinel? 请查看文章:SpringCloud Alibaba微服务实战(一) - 基础环境搭建 构建服务消费者cloud-sentinel进行服务调用 服务创建请查看文章:Spring ...

  7. 文件流处理流式处理大数据处理

    20210315 https://www.yuque.com/7125messi/wydusr/wweetn 42-(重要重要重要)加速pandas(Modin和pandarallel) 重点 htt ...

  8. javaSE8的流库总结

    前言 本篇博客对 java 8 的流库进行一个总结 1. 从迭代到流 在处理集合时,我们通常会迭代遍历它的元素,并在每个元素上执行某项操作,列如假设我们想统计某本书的所有长单词数(单词长度大于10): ...

  9. CUDA 7流简化并发

    CUDA 7流简化并发 异构计算是指有效使用系统中的所有处理器,包括CPU和GPU.为此,应用程序必须在多个处理器上同时执行功能.CUDA应用程序通过在流(按顺序执行的命令序列)中,执行异步命令来管理 ...

最新文章

  1. 小人脸检测 - Finding Tiny Faces
  2. JavaScript引擎研究与C、C++与互调用(转)
  3. Win10环境下搭建virtualenvwrapper-win
  4. 解决PHP生成校验码时“图像因其本身有错无法显示”的错误
  5. java循环左一_左旋转字符串(Java)-循环Index方式
  6. Python绘制图形之Matplotllib绘图
  7. HDU Integer's Power(容斥原理)
  8. 使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架...
  9. idea迁移到其他电脑,省去重新安装破解及配置
  10. 逻辑卷管理LVM (Logical Volume Manager)
  11. 可转债数据一览表集思录_可转债投资每周记录20200816
  12. python写法教程_Python的表达式写法
  13. navicat下载安装、连接MySQL数据库操作教程(官网下载)
  14. ubuntu安装及使用笔记
  15. AUTOSAR关于使用PDUR 进行路由的CDD使用策略
  16. WIN10防火墙端口添加例外
  17. 使用Qt实现一个必应壁纸客户端
  18. Arduino学习(六) 继电器实验
  19. 怎么从网上办大流量卡呢?具体步骤小编都给你写好的!
  20. ZeroDivisionError:Integer division or modulo by zero

热门文章

  1. [X11forword]Display remote application with X11 forword / 远程显示linux服务器GUI
  2. BZOJ 1051 受欢迎的牛(Tarjan缩点)
  3. PHP $_FILES中error返回值详解
  4. [再寄小读者之数学篇](2014-06-22 求导数 [中国科学技术大学2014年高等数学B考研试题])...
  5. Bootstrap 斜体、文本对齐、缩略图、地址、列表等
  6. Linux中的查找命令
  7. 不服来战!这才是产品汪与程序猿撕逼的正确方式
  8. 【5分钟一本书】暗时间:用时间管理把握产品的进度条
  9. 智慧城市:解构成渝城市群一体化
  10. 地铁译:Spark for python developers --- 搭建Spark虚拟环境 4