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之间不连通. 大致思路: 最基础的拆点最大 ...
随机推荐
- CSS的文本样式
CSS的文本样式 1.颜色 2.文本对齐方式 3.首行缩进 4.行高 5.装饰 1. 文本位置 居中: text-align: center; 靠左: text-align: left; 靠右: te ...
- 用MyEclipse远程debug
第一步 编辑 tomcat下的文件startup.sh文件,我的路径是 /root/apache-tomcat-6.0.24/bin/startup.sh 命令:vim startup.sh将decl ...
- Python标准库Random
基本方法 获取一个[0,1)的随机浮点数: import random print(random.random()) #输出 0.6701488343121276 获取指定区间的随机浮点数: impo ...
- python实现进度条下载
核心代码: for i in range(10): print('\r' + '>' * i, end='') 示例展示以搜狗输入法为例: import timeimport requestsi ...
- AntDesign(React)学习-2 第一个页面
1.前面创建了第一个项目jgdemo,结构如下,使用TypeScript. 2.yarn start启动项目 3.点击GettingStarted是umi的官方网站 https://umijs.org ...
- HTML文本域标签
textarea文本域 cols指定列数 rows行数(不够用会自动扩容)
- MySQL启动和停止
MySQL视为大仓库,关闭的时候有权限有身份都无法进入使用的时候要保持启用状态 方式一: 计算机游击找到“管理”打开 左侧栏目中找到“服务和应用程序”打开 打开服务 找到MySQL...,右击.... ...
- 笔记(tm_springboot)
1.@change="getFile($event)" 2.File imageFolder= new File(request.getServletContext().getRe ...
- PHP 中 16 个魔术方法详解
PHP 中 16 个魔术方法详解 前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...
- 【Python】time库