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 9
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 const int MAXN = 100010;//点数的最大值 6 const int MAXM = 400010;//边数的最大值 7 const int INF = 0x3f3f3f3f; 8 int n; 9 struct Edge 10 { 11 int to,next,cap,flow; 12 }edge[MAXM];//注意是MAXM 13 int tol; 14 int head[MAXN]; 15 int gap[MAXN],dep[MAXN],cur[MAXN]; 16 void init() 17 { 18 tol = 0; 19 memset(head,-1,sizeof(head)); 20 } 21 void addedge(int u,int v,int w,int rw = 0) 22 { 23 edge[tol].to = v; edge[tol].cap = w; edge[tol].flow = 0; 24 edge[tol].next = head[u]; head[u] = tol++; 25 edge[tol].to = u; edge[tol].cap = rw; edge[tol].flow = 0; 26 edge[tol].next = head[v]; head[v] = tol++; 27 } 28 int Q[MAXN]; 29 void BFS(int start,int end) 30 { 31 memset(dep,-1,sizeof(dep)); 32 memset(gap,0,sizeof(gap)); 33 gap[0] = 1; 34 int front = 0, rear = 0; 35 dep[end] = 0; 36 Q[rear++] = end; 37 while(front != rear) 38 { 39 int u = Q[front++]; 40 for(int i = head[u]; i != -1; i = edge[i].next) 41 { 42 int v = edge[i].to; 43 if(dep[v] != -1)continue; 44 Q[rear++] = v; 45 dep[v] = dep[u] + 1; 46 gap[dep[v]]++; 47 } 48 } 49 } 50 int S[MAXN]; 51 int SAP(int start,int end,int N) 52 { 53 BFS(start,end); 54 memcpy(cur,head,sizeof(head)); 55 int top = 0; 56 int u = start; 57 int ans = 0; 58 while(dep[start] < N) 59 { 60 if(u == end) 61 { 62 int Min = INF; 63 int inser; 64 for(int i = 0;i < top;i++) 65 if(Min > edge[S[i]].cap - edge[S[i]].flow) 66 { 67 Min = edge[S[i]].cap - edge[S[i]].flow; 68 inser = i; 69 } 70 for(int i = 0;i < top;i++) 71 { 72 edge[S[i]].flow += Min; 73 edge[S[i]^1].flow -= Min; 74 } 75 ans += Min; 76 top = inser; 77 u = edge[S[top]^1].to; 78 continue; 79 } 80 bool flag = false; 81 int v; 82 for(int i = cur[u]; i != -1; i = edge[i].next) 83 { 84 v = edge[i].to; 85 if(edge[i].cap - edge[i].flow && dep[v]+1 == dep[u]) 86 { 87 flag = true; 88 cur[u] = i; 89 break; 90 } 91 } 92 if(flag) 93 { 94 S[top++] = cur[u]; 95 u = v; 96 continue; 97 } 98 int Min = N; 99 for(int i = head[u]; i != -1; i = edge[i].next) 100 if(edge[i].cap - edge[i].flow && dep[edge[i].to] < Min) 101 { 102 Min = dep[edge[i].to]; 103 cur[u] = i; 104 } 105 gap[dep[u]]--; 106 if(!gap[dep[u]])return ans; 107 dep[u] = Min + 1; 108 gap[dep[u]]++; 109 if(u != start)u = edge[S[--top]^1].to; 110 } 111 return ans; 112 } 113 int main() 114 { 115 #ifndef ONLINE_JUDGE 116 freopen("1.in","r",stdin); 117 #endif 118 int start,end; 119 int m; 120 int u,v,z; 121 int T; 122 scanf("%d",&T); 123 while(T--) 124 { 125 init(); 126 scanf("%d%d",&n,&m); 127 int minx=10000000; 128 int maxx=-10000000; 129 int x,y; 130 for(int i=1;i<=n;i++) 131 { 132 scanf("%d%d",&x,&y); 133 if(minx>x) 134 { 135 minx=x; 136 start=i; 137 } 138 if(maxx<x) 139 { 140 maxx=x; 141 end=i; 142 } 143 } 144 while(m--) 145 { 146 scanf("%d%d%d",&u,&v,&z); 147 addedge(u,v,z); 148 addedge(v,u,z); 149 } 150 int ans=SAP(start,end,n); 151 printf("%d\n",ans); 152 } 153 return 0; 154 }
转载于:https://www.cnblogs.com/cnblogs321114287/p/4348661.html
hdu 4280 最大流sap相关推荐
- HDU - 4280 Island Transport(最大流)
题目链接:点击查看 题目大意:给出n个岛屿,由m条无向边连接而成,现在要从最西边的岛屿到达最东边的岛屿,问最大流量为多少 题目分析:最大流模板题,只不过这个毒瘤题卡掉了dinic,只能去网上找了个SA ...
- hdu 4309(最大流+枚举状态)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4309 思路:2^12枚举修复哪些桥,不修复的桥没有花费,连接的边流量为1,要修复的桥则计算花费,边的流 ...
- hdu 4888 最大流慢板
http://acm.hdu.edu.cn/showproblem.php?pid=4888 添加一个源点与汇点,建图如下: 1. 源点 -> 每一行对应的点,流量限制为该行的和 2. 每一行对 ...
- hdu 3395(费用流,二分图的最大权匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3395 解题思路: 这个构图很容易出错,最开始都容易想,把每个点拆开,分为攻击和被攻击的,建图如下: 源 ...
- hdu 3549 最大流(EK实现)
Problem: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目都直接说求最大流了,还需要做什么 数据这么弱,直接套最大流模版 #include&l ...
- HDU 1533 费用流入门
费用流 (最小费用最大流) 网络图中 每条边 多给出了 单位流量的费用 cost(u,v) ,当通过(u,v)的流量为f(u,v)f(u,v)f(u,v)时,需要花费 f(u,v)∗cost(u,v) ...
- hdu 5045 费用流
题意: 网选赛的一个题目,当时各种超时各种wa,哎! 题意是有n个人m道题,每个人对每道题都有一个ac率,每相邻的n到题目必须n个人每人一道,顺序无所谓,上下的m%n道只要不出现一个人做两道 ...
- hdu 4309 最大流 + DFS
题意: 给以三种有向边 (1) 隧道,可以过无数人,也可以藏c个人. (2) 路,只能过人(流量INF). (3)古桥,如果不修理可以过1个人,修理可以过无数个人,但 ...
- (转)网络流-最大流 SAP算法(模板)
今天做了一个毒瘤题把dinic卡了,不想因为优化常数改变习惯性的写法,干脆就直接去找个效率更高的算法拿来用多好 注意这套板子的n要在全局变量中用,并且n是所有点的数量(包括源点和汇点),所以在有的时候 ...
最新文章
- typora行内公式怎么显示不了,怎么办?
- Rushcrm:客户关系管理适合的才是好的
- 【AI-1000问】Face detection、alignment、verification、identification(recognization) 你能分的清楚吗?
- Qt 互斥锁 QMutex 的简单应用
- python定义方法继承类_Python类的定义、继承及类对象使用方法简明教程
- liferay6.2 struts2 request.getparameter取值为null
- c语言oj合法标识符,YTUOJ-C语言合法标识符
- Linux系统下搭建BUG管理系统---禅道
- 《计算机网络》第三章:数据链路层(The Data Link Layer)
- NYOJ-水池数目(dfs)
- LeetCode刷题(7)
- 摩擦力特点用计算机绘制出,AGC液压缸模拟工况摩擦力特性测试方法研究
- php ddos攻击代码,PHP拦截网站DDOS攻击防御代码
- 宇视EZVMS系统通过GB28181协议接入EasyGBS的步骤说明
- U盘不能复制超过4G的文件解决方法
- 微博分享代码怎么显示自定义来源
- 科大迅飞语音听写(流式版)WebAPI,Web前端、H5调用 语音识别,语音搜索,语音听写
- esp32➡遥控篇➡turtlesim➡mobot➡turtlebot3
- 背包问题不同要求下的初始化
- 免费英文写作批改网站
热门文章
- Linux tee的花式用法和pee
- Win32-Application的窗口和对话框
- 老男孩36期运维脱产班---- 决心书
- 第三课、Qt的诞生和本质------------------狄泰软件学院
- Why does pthread_cond_signal not work?【转】
- 烂泥:利用Diskgen找回分区破坏前的资料
- 维修点滴:键盘进杂物
- rip,ospf,eigrp内部网关协议的区别与用法
- TurboMail手机客户端—强大的附件文档阅读能力
- 有关Accordion组件的研究——Silverlight学习笔记[27]