模板套起来

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相关推荐

  1. HDU - 4280 Island Transport(最大流)

    题目链接:点击查看 题目大意:给出n个岛屿,由m条无向边连接而成,现在要从最西边的岛屿到达最东边的岛屿,问最大流量为多少 题目分析:最大流模板题,只不过这个毒瘤题卡掉了dinic,只能去网上找了个SA ...

  2. hdu 4309(最大流+枚举状态)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4309 思路:2^12枚举修复哪些桥,不修复的桥没有花费,连接的边流量为1,要修复的桥则计算花费,边的流 ...

  3. hdu 4888 最大流慢板

    http://acm.hdu.edu.cn/showproblem.php?pid=4888 添加一个源点与汇点,建图如下: 1. 源点 -> 每一行对应的点,流量限制为该行的和 2. 每一行对 ...

  4. hdu 3395(费用流,二分图的最大权匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3395 解题思路: 这个构图很容易出错,最开始都容易想,把每个点拆开,分为攻击和被攻击的,建图如下: 源 ...

  5. hdu 3549 最大流(EK实现)

    Problem: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目都直接说求最大流了,还需要做什么 数据这么弱,直接套最大流模版 #include&l ...

  6. HDU 1533 费用流入门

    费用流 (最小费用最大流) 网络图中 每条边 多给出了 单位流量的费用 cost(u,v) ,当通过(u,v)的流量为f(u,v)f(u,v)f(u,v)时,需要花费 f(u,v)∗cost(u,v) ...

  7. hdu 5045 费用流

    题意:      网选赛的一个题目,当时各种超时各种wa,哎! 题意是有n个人m道题,每个人对每道题都有一个ac率,每相邻的n到题目必须n个人每人一道,顺序无所谓,上下的m%n道只要不出现一个人做两道 ...

  8. hdu 4309 最大流 + DFS

    题意:      给以三种有向边     (1) 隧道,可以过无数人,也可以藏c个人.     (2) 路,只能过人(流量INF).     (3)古桥,如果不修理可以过1个人,修理可以过无数个人,但 ...

  9. (转)网络流-最大流 SAP算法(模板)

    今天做了一个毒瘤题把dinic卡了,不想因为优化常数改变习惯性的写法,干脆就直接去找个效率更高的算法拿来用多好 注意这套板子的n要在全局变量中用,并且n是所有点的数量(包括源点和汇点),所以在有的时候 ...

最新文章

  1. typora行内公式怎么显示不了,怎么办?
  2. Rushcrm:客户关系管理适合的才是好的
  3. 【AI-1000问】Face detection、alignment、verification、identification(recognization) 你能分的清楚吗?
  4. Qt 互斥锁 QMutex 的简单应用
  5. python定义方法继承类_Python类的定义、继承及类对象使用方法简明教程
  6. liferay6.2 struts2 request.getparameter取值为null
  7. c语言oj合法标识符,YTUOJ-C语言合法标识符
  8. Linux系统下搭建BUG管理系统---禅道
  9. 《计算机网络》第三章:数据链路层(The Data Link Layer)
  10. NYOJ-水池数目(dfs)
  11. LeetCode刷题(7)
  12. 摩擦力特点用计算机绘制出,AGC液压缸模拟工况摩擦力特性测试方法研究
  13. php ddos攻击代码,PHP拦截网站DDOS攻击防御代码
  14. 宇视EZVMS系统通过GB28181协议接入EasyGBS的步骤说明
  15. U盘不能复制超过4G的文件解决方法
  16. 微博分享代码怎么显示自定义来源
  17. 科大迅飞语音听写(流式版)WebAPI,Web前端、H5调用 语音识别,语音搜索,语音听写
  18. esp32➡遥控篇➡turtlesim➡mobot➡turtlebot3
  19. 背包问题不同要求下的初始化
  20. 免费英文写作批改网站

热门文章

  1. Linux tee的花式用法和pee
  2. Win32-Application的窗口和对话框
  3. 老男孩36期运维脱产班---- 决心书
  4. 第三课、Qt的诞生和本质------------------狄泰软件学院
  5. Why does pthread_cond_signal not work?【转】
  6. 烂泥:利用Diskgen找回分区破坏前的资料
  7. 维修点滴:键盘进杂物
  8. rip,ospf,eigrp内部网关协议的区别与用法
  9. TurboMail手机客户端—强大的附件文档阅读能力
  10. 有关Accordion组件的研究——Silverlight学习笔记[27]