hdu 4280 最大流 sap模板
给你岛的坐标求最西边到最东边的最大流
/*
最大流模板
sap
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std; const int MAXN=;//点数的最大值
const int MAXM=;//边数的最大值
const int INF=0x3f3f3f3f; struct Node
{
int from,to,next;
int cap;
}G[MAXM];
int tol;
int head[MAXN];
int dep[MAXN];
int gap[MAXN];//gap[x]=y :说明残留网络中dep[i]==x的个数为y int n;//n是总的点的个数,包括源点和汇点 void init()
{
tol=;
memset(head,-,sizeof(head));
} void build(int u,int v,int w)
{
G[tol].from=u;
G[tol].to=v;
G[tol].cap=w;
G[tol].next=head[u];
head[u]=tol++;
G[tol].from=v;
G[tol].to=u;
G[tol].cap=;
G[tol].next=head[v];
head[v]=tol++;
}
void BFS(int st,int ed)
{
memset(dep,-,sizeof(dep));
memset(gap,,sizeof(gap));
gap[]=;
int que[MAXN];
int left,right;
left=right=;
dep[ed]=;
que[right++]=ed;
while(left!=right)
{
int u=que[left++];
if(left==MAXN)left=;
for(int i=head[u];i!=-;i=G[i].next)
{
int v=G[i].to;
if(dep[v]!=-)continue;
que[right++]=v;
if(right==MAXN)right=;
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 temp=INF;
int inser;
for(i=;i<top;i++)
if(temp>G[S[i]].cap){
temp=G[S[i]].cap;
inser=i;
}
for(i=;i<top;i++){
G[S[i]].cap-=temp;
G[S[i]^].cap+=temp;
}
res+=temp;
top=inser;
u=G[S[top]].from;
}
if(u!=ed&&gap[dep[u]-]==)//出现断层,无增广路
break;
for(i=cur[u];i!=-;i=G[i].next)
if(G[i].cap!=&&dep[u]==dep[G[i].to]+)
break;
if(i!=-){
cur[u]=i;
S[top++]=i;
u=G[i].to;
}
else{
int min=n;
for(i=head[u];i!=-;i=G[i].next){
if(G[i].cap==)continue;
if(min>dep[G[i].to]){
min=dep[G[i].to];
cur[u]=i;
}
}
--gap[dep[u]];
dep[u]=min+;
++gap[dep[u]];
if(u!=st)u=G[S[--top]].from;
}
}
return res;
} int main()
{
int st,ed;
int m;
int u,v,z;
int T;
scanf("%d",&T); while(T--){
init();
scanf("%d%d",&n,&m);
int minx=;
int maxx=-;
int x,y;
for(int i=;i<=n;i++){
scanf("%d%d",&x,&y);
if(minx>x){
minx=x;
st=i;
}
if(maxx<x){
maxx=x;
ed=i;
}
}
while(m--){
scanf("%d%d%d",&u,&v,&z);
build(u,v,z);
build(v,u,z);
}
//n一定是点的总数,这是使用SAP模板需要注意的
int ans=SAP(st,ed);
printf("%d\n",ans);
}
return ;
}
hdu 4280 最大流 sap模板的更多相关文章
- hdu 4280 最大流sap
模板套起来 1 5 7 //5个结点,7个边 3 3 //坐标 3 0 3 1 0 0 4 5 1 3 3 //相连的结点和流 2 3 4 2 4 3 1 5 6 4 5 3 1 4 4 3 4 2 ...
- hdu 4280 最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4280 #pragma comment(linker, "/STACK:1024000000, ...
- hdu 3605 最大流sap+二进制思想(啊啊)
/*因为n非常大如果正常建边的话会超内存,每种状态的数目共2--10种状状体记录起来,源点与状态建边权值为状态数,状态与星球建边,星球与汇点建边*/ #include<stdio.h> # ...
- HDU 4280 Island Transport(网络流,最大流)
HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...
- HDU 4280 Island Transport(无向图最大流)
HDU 4280:http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意: 比较裸的最大流题目,就是这是个无向图,并且比较卡时间. 思路: 是这样的,由于是 ...
- 【网络流#1】hdu 3549 - 最大流模板题
因为坑了无数次队友 要开始学习网络流了,先从基础的开始,嗯~ 这道题是最大流的模板题,用来测试模板好啦~ Edmonds_Karp模板 with 前向星 时间复杂度o(V*E^2) #include& ...
- 网络流 最大流SAPkuangbin模板
hdu 1532 求1~n的最大流 #include<stdio.h> #include<string.h> #include<algorithm> #includ ...
- HDU 4280 Island Transport(网络流)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=4280">http://acm.hdu.edu.cn/showproblem.php ...
- hdu 4289 最大流拆点
大致题意: 给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中的每个点,去掉这个点都需要一定的花费.求至少多少花费才能使得s和t之间不连通. 大致思路: 最基础的拆点最大 ...
随机推荐
- Java Day2(下)
Java learning_Day2(下) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...
- 2019ICPC南昌站E.Bob's Problem
题意: 一张图,n个点,m条边分为黑边和白边,黑边任意选,白边只能选k条,在保持整张图连通的情况下使得所选变的权值和最大 解析: 因为边权全部是正值,所以可以把黑边全选上,缩点之后对各个连通块和白边进 ...
- java单词统计
要求1:输出某个英文文本文件中26字母出现的频率,由高到低排序,并显示字母出现的百分比,精确到小数点后两位. 思路:分别设存放字母和字母出现次数的数组,遍历文件内容,将字母及出现频率按由高到低的顺序输 ...
- RN开发-组件View,Text
1.外联js文件(RN自定义组件) module.exports=Header; 导出模块 const Header=require('./header'); 导入外部j ...
- ssm开发垃圾分类查询系统 源码 mysql
需求 基于SSM实现一个垃圾分类查询管理系统, 用户可以根据自定义查询分类信息, 管理员可以对分类信息, 垃圾详情信息进行增删改查的管理 运行环境 jdk1.8,tomcat8.5,mysql5.6, ...
- unity中添加音量控制的一些步骤
1.先确认要控制的音源(Audio Source)所使用的输出(Output),例如我这里BGM使用的是MainMixer: 2.暴露音量(Volume)参数,让脚本可以控制.这里如果不暴露出来,脚本 ...
- JUC-分支合并框架
一.原理 Fork:把一个复杂任务进行分拆,大事化小 Join:把分拆任务的结果进行合并 ForkJoinPool 分支合并池 类比=> 线程池 ForkJoinTask ForkJo ...
- 一点点学习PS--实战二
本节实战,可以学到如何制作gif动图,制作搜狗输入法皮肤 1.工具使用 (1)滤镜--液化--膨胀:这里是制作出猫咪打呼时肚子和气泡胀大的效果 (2)图像--画布大小:可裁剪画布到指定像素,并且裁剪指 ...
- jsp连接数据库增删改查
一,创建表 二.将jar包复制导入到lib文件夹下 三.创建工具包连接数据库 package com.bill.util; import java.sql.Connection; import jav ...
- paper: VG -- re-read
重点: 1.The constructed graph inherits several properties of the series in its structure. periodic se ...