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之间不连通. 大致思路: 最基础的拆点最大 ...
随机推荐
- Redis 数据总结 (2.命令实现逻辑)
1.通过合理的Redis数据分布,实现逻辑的简化,即将部分逻辑纳入redis 连个sort表的合并,相关的资料见 http://www.redis.net.cn/order/3613.html ZIN ...
- winform DataGrid排序、去掉第一的空白列
排序: dataGridView1.Sort(dataGridView1.Columns[3], ListSortDirection.Descending); 去掉空白列: dataGridView1 ...
- JS高级---正则表达式其他方法的使用
正则表达式其他方法的使用 正则表达式中:g 表示的是全局模式匹配 正则表达式中:i 表示的是忽略大小写 var str = "中国移动:10086,中国联通:10010,中国电信:10000 ...
- Windows DOS下查看硬盘分区
运行cmd Diskpart //加载 list Disk //列出硬盘 list Volume //列出分区 Select Disk //选择 编号0的硬盘 list Partition //列出当 ...
- JUC-JUC是什么?
一.JUC是什么? java.util.concurrent在并发编程中使用的工具类 进程/线程回顾 1.进程/线程是什么? 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是 ...
- Java修饰符类型
转自原文:http://www.yiibai.com/java/java_modifier_types.html 修饰符是添加到这些定义来改变它们的含义的关键词. Java语言有各种各样修饰词,其中包 ...
- 手机app测试要点(复制文)
一.简介 移动应用App已经渗透到每个人的生活.娱乐.学习.工作当中,令人激动.兴奋且具有创造性的各种App犹如雨后春笋般交付到用户手中.各类智能终端也在快速发布,而开发者对于全球移动设备的质量和性能 ...
- 【SQL】基础概念
1.. In order to find the rows where the value for a column is or is not NULL, you would use IS NULL ...
- 查看杀死django进程
#命令:#用于显示tcp,udp的端口和进程等相关情况netstat -tunlp"""ps:-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n ...
- Qt- 图形界面应用程序的运行模式
main() 定义主窗口 ————>fd = DefineMainWindow() 创建主窗口————>win = CreateMainWindow() 创建主窗口中的元素-----> ...