HDU4280 Island Transport
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的更多相关文章
- HDU4280 Island Transport —— 最大流 ISAP算法
题目链接:https://vjudge.net/problem/HDU-4280 Island Transport Time Limit: 20000/10000 MS (Java/Others) ...
- 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 ...
- hdu4280 Island Transport 最大流
In the vast waters far far away, there are many islands. People are living on the islands, and all t ...
- HDU4280:Island Transport(最大流)
Island Transport Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 4280 Island Transport(网络流,最大流)
HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...
- Island Transport
Island Transport http://acm.hdu.edu.cn/showproblem.php?pid=4280 Time Limit: 20000/10000 MS (Java/Oth ...
- HDU 4280 Island Transport
Island Transport Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged on HDU. Origi ...
- Hdu 4280 Island Transport(最大流)
Island Transport Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 4280 Island Transport(dinic+当前弧优化)
Island Transport Description In the vast waters far far away, there are many islands. People are liv ...
随机推荐
- 1015 Reversible Primes
1. 题目 2. 抽象建模 无 3. 方法 无 4. 注意点 素数判断(1不是素数) 数值的倒转 5. 代码 #include<stdio.h> #include<math.h> ...
- 解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)
报错描述: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) 通过ansible远程给主机更换端口并重新启动ng ...
- 【转载】Java的JVM原理
转自:http://blog.csdn.net/witsmakemen/article/details/28600127/ 一.Java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Jav ...
- 2019 ICPC徐州网络赛 E. XKC's basketball team(二分)
计蒜客题目链接:https://nanti.jisuanke.com/t/41387 题目大意:给定一组无序序列,从第一个数开始,求最远比这个数大m的数,与这个数之间相隔多少数字?如果没有输出-1,否 ...
- DataGridView绑定数据源后添加行
本文链接:https://blog.csdn.net/u012386475/article/details/88639799 在已经绑定数据源时,无法以Add的方式方式添加行,会报错 解决方法一: D ...
- bugku 你必须让他停下
首先打开链接会发现一个不断刷新的网页 然后使用抓包工具burpsuit抓网页 然后右键点击跳转到repeater 然后点击go一直点击 注意黄色区域的变化然后在点击过程中会发现flag 然后拿到答案
- [蓝桥杯][基础训练]FJ的字符串
Description FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其中的规律 ...
- 【PAT甲级】1103 Integer Factorization (30 分)
题意: 输入三个正整数N,K,P(N<=400,K<=N,2<=P<=7),降序输出由K个正整数的P次方和为N的等式,否则输出"Impossible". / ...
- 使用docker容器时遇到的2个问题
最近项目在centOS7服务器上用docker部署了几个服务,在运行的时候发现,总是过一段时间,容器内的根目录就变为只读而无法写入了. 经过调查都是因为docker/devicemapper/devi ...
- touch命令修改时间
实例[rhel7]: [root@localhost test]# stat 1.txt 文件:"1.txt" 大小:0 块:0 IO 块:4096 普通空文件设备:fd00h/6 ...