ISAP求最大流模板

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int maxn=;
const int inf=1e9;
struct node {
int from,to,next;
int cap;
}edge[maxn*];
int tol;
int head[maxn];
int dep[maxn];
int gap[maxn];//gep[x]=y说明残量网络中dep[i]==x的个数为y
int n;//点的个数
void init()
{
tol=;
memset(head,-,sizeof(head));
} void addedge(int u,int v,int w)
{
edge[tol].from=u;
edge[tol].to=v;
edge[tol].cap=w;
edge[tol].next=head[u];
head[u]=tol++;
}
void bfs (int st,int ed) {
memset (dep,-,sizeof(dep));
memset (gap,,sizeof(gap));
gap[]=;
queue<int> q;
dep[ed]=;
q.push(ed);
while (!q.empty()) {
int u=q.front();
q.pop();
for (int i=head[u];i!=-;i=edge[i].next) {
int v=edge[i].to;
if (dep[v]!=-) continue;
q.push(v);
dep[v]=dep[u]+;
gap[dep[v]]++;
}
}
}
int sap (int st,int ed) {
int res=;
bfs (st,ed);
int cur[maxn];
int s[maxn];
int top=;
memcpy (cur,head,sizeof(head));
int u=st;
int i;
while (dep[st]<n) {
if (u==ed) {
int tmp=inf;
int inser;
for (i=;i<top;i++)
if (tmp>edge[s[i]].cap) {
tmp=edge[s[i]].cap;
inser=i;
}
for (i=;i<top;i++) {
edge[s[i]].cap-=tmp;
edge[s[i]^].cap+=tmp;
}
res+=tmp;
top=inser;
u=edge[s[top]].from;
}
if (u!=ed&&gap[dep[u]-]==) break;
for (i=cur[u];i!=-;i=edge[i].next)
if (edge[i].cap!=&&dep[u]==dep[edge[i].to]+) break;
if (i!=-) {
cur[u]=i;
s[top++]=i;
u=edge[i].to;
}
else {
int min=n;
for (i=head[u];i!=-;i=edge[i].next) {
if (edge[i].cap==) continue;
if (min>dep[edge[i].to]) {
min=dep[edge[i].to];
cur[u]=i;
}
}
gap[dep[u]]--;
dep[u]=min+;
gap[dep[u]]++;
if (u!=st) u=edge[s[--top]].from;
}
}
return res;
}
int main() {
int start,end;
int m;
int u,v,z;
int T;
scanf("%d",&T);
while(T--) {
init();
scanf("%d%d",&n,&m);
int Min=inf;
int Max=-inf;
int x,y;
for(int i=;i<=n;i++) {
scanf("%d%d",&x,&y);
if(Min>x) {
Min=x;
start=i;
}
if(Max<x) {
Max=x;
end=i;
}
}
while(m--) {
scanf("%d%d%d",&u,&v,&z);
addedge(u,v,z);
addedge(v,u,z);
}
//n一定是点的总数,这是使用SAP模板需要注意的
int ans=sap(start,end);
printf("%d\n",ans);
}
return ;
}

HDU4280 Island Transport的更多相关文章

  1. HDU4280 Island Transport —— 最大流 ISAP算法

    题目链接:https://vjudge.net/problem/HDU-4280 Island Transport Time Limit: 20000/10000 MS (Java/Others)   ...

  2. Hdu4280 Island Transport 2017-02-15 17:10 44人阅读 评论(0) 收藏

    Island Transport Problem Description In the vast waters far far away, there are many islands. People ...

  3. hdu4280 Island Transport 最大流

    In the vast waters far far away, there are many islands. People are living on the islands, and all t ...

  4. HDU4280:Island Transport(最大流)

    Island Transport Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. HDU 4280 Island Transport(网络流,最大流)

    HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...

  6. Island Transport

    Island Transport http://acm.hdu.edu.cn/showproblem.php?pid=4280 Time Limit: 20000/10000 MS (Java/Oth ...

  7. HDU 4280 Island Transport

    Island Transport Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged on HDU. Origi ...

  8. Hdu 4280 Island Transport(最大流)

    Island Transport Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  9. HDU 4280 Island Transport(dinic+当前弧优化)

    Island Transport Description In the vast waters far far away, there are many islands. People are liv ...

随机推荐

  1. Uncaught TypeError: Cannot read property 'addEventListener' of null

    <script type="text/javascript"> var body1=document.getElementById('#body') </scri ...

  2. AOP使用

    package com.googosoft.db.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lan ...

  3. 2019牛客多校第四场A meeting 思维

    meeting 题意 一个树上有若干点上有人,找出一个集合点,使得所有人都到达这个点的时间最短(无碰撞) 思路 就是找树的直径,找直径的时候记得要找有人的点 #include<bits/stdc ...

  4. Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)

    Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...

  5. ansible笔记(6):常用模块之系统模块

    1.cron模块 cron命令是计划任务功能,与crontab功能类似. 示例:时间格式--->>>分  时  日  月 星期 10 12 27 * *  tar -cvzf log ...

  6. 软件工程2020第一次作业(by cybersa)

    1 作业描述 作业属于哪个课程 2020春福大软工实践W班 这个作业要求在哪里 寒假作业(1/2) 这个作业的目标 建立博客.掌握markdown语法,学习写博客,回顾,总结,展望自己的学习历程 作业 ...

  7. TCL create list from file

    proc create_list {filename {prompt verbose} {opts "" }} { set list_return {} if {[file exi ...

  8. 如何创建redis集群

    1.下载redis源码包 wget http://download.redis.io/releases/redis-3.2.4.tar.gz 2.解压并安装 tar xvf redis-.tar.gz ...

  9. Reinforcement Learning,微信公众号:DRL学习

    欢迎大家关注微信公众号:DRL学习,我们一起来学习强化学习和深度强化学习的算法及现状应用问题. 强化学习简单说就是学习如何最大化未来奖励的预期总和,以及agent学会在环境中做出的行动序列,其中随机状 ...

  10. FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮

    一.Flutter FloatingActionButton 介绍 FloatingActionButton 简称 FAB,可以实现浮动按钮,也可以实现类似闲鱼 app 的地步凸起导航   child ...