hdu 4280 Island Transport isap果题
来源:互联网 发布:js获取其他网页内容 编辑:程序博客网 时间:2024/05/18 16:37
题意:给出n个二维坐标系上的点(其实就是n个点),最左的是起点,最右的是终点,且各只有一个,问从起点到终点的最大流。
建边直接上模板即可
#include <map>#include <set>#include <queue>#include <stack>#include <vector>#include <string>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;#define lson l, mid, rt << 1#define rson mid + 1, r, rt << 1 | 1#define ls rt << 1#define rs rt << 1 | 1#define pi acos(-1.0)#define eps 1e-8#define asd puts("sdfsdfsdfsdfsdfsdf");typedef long long ll;const int inf = 0x3f3f3f3f;const int N = 100010;struct node{ int v, w, nxt;}e[N<<2];int head[N];int cur[N];int gap[N];int s[N], top;int dep[N];int st, ed;int n, m, cnt;queue <int> q;void init(){ cnt = 0; memset( head, -1, sizeof( head ) );}void add( int u, int v, int w ){ e[cnt].v = v; e[cnt].w = w; e[cnt].nxt = head[u]; head[u] = cnt++; e[cnt].v = u; e[cnt].w = w; e[cnt].nxt = head[v]; head[v] = cnt++;}void rev_bfs(){ memset( gap, 0, sizeof( gap ) ); memset( dep, -1, sizeof( dep ) ); while( !q.empty() ) q.pop(); q.push(ed); dep[ed] = 0; gap[0] = 1; while( !q.empty() ) { int u = q.front(); q.pop(); for( int i = head[u]; ~i; i = e[i].nxt ) { int v = e[i].v; if( ~dep[v] ) continue; dep[v] = dep[u] + 1; gap[dep[v]]++; q.push(v); } }}int isap(){ int flow = 0, u = st, i; memcpy( cur, head, sizeof head ); rev_bfs(); top = 0; //int nv = ed + 1; while( dep[st] < n ) { if( u == ed ) { int tmp, minn = inf; for( i = 0; i < top; ++i ) { if( minn > e[s[i]].w ) { minn = e[s[i]].w; tmp = i; } } for( i = 0; i < top; ++i ) { e[s[i]].w -= minn; e[s[i]^1].w += minn; } flow += minn; top = tmp; u = e[s[top]^1].v; } for( i = cur[u]; ~i; i = e[i].nxt ) { if( e[i].w > 0 && dep[u] == dep[e[i].v] + 1 ) { cur[u] = i; break; } } if( ~i ) { s[top++] = cur[u]; u = e[i].v; } else { if( 0 == (--gap[dep[u]]) ) break; int minn = n; for( i = head[u]; ~i; i = e[i].nxt ) { int v = e[i].v; if( e[i].w > 0 && minn > dep[v] ) { minn = dep[v]; cur[u] = i; } } dep[u] = minn + 1; gap[dep[u]]++; if( u != st ) { u = e[ s[--top]^1 ].v; } } } return flow;}int main(){ int tot; scanf("%d", &tot); while( tot-- ) { int t1 = inf, t2 = -inf; ///t1 for st, t2 for ed init(); scanf("%d%d", &n, &m); int x, y; for( int i = 1; i <= n; ++i ) { scanf("%d%d", &x, &y); if( x < t1 ) { st = i; t1 = x; } if( x > t2 ) { t2 = x; ed = i; } } int u, v, w; while( m-- ) { scanf("%d%d%d", &u, &v, &w); add( u, v, w ); } int ans = isap(); printf("%d\n", ans); } return 0;}
0 0
- hdu 4280 Island Transport isap果题
- HDU - 4280 Island Transport(ISAP)
- hdu 4280 Island Transport 【图论-网络流-ISAP+栈优化】
- 文章标题 HDU 4280 :Island Transport (最大流--ISAP)
- hdu 4280 Island Transport
- HDU 4280 Island Transport
- HDU - 4280 Island Transport
- hdu 4280 Island Transport
- [Hdu 4280]Island Transport
- HDU-4280 Island Transport
- HDU 4280 Island Transport(SAP)
- [HDU 4280]Island Transport[SAP]
- HDU 4280 Island Transport (ISPA)
- hdu4280 Island Transport (最大流ISAP算法)
- HDU 4280 Island Transport(网络流)
- HDU 4280 Island Transport 最大流SAP
- HDU 4280 Island Transport(网络流)
- HDU 4280 Island Transport 网络流裸题
- genymotion-安卓模拟器-修改IMEI
- 洞悉linux下的Netfilter&iptables:什么是Netfilter?
- mybatis实战教程(mybatis in action),mybatis入门到精通
- Android中与ViewRoot相关的一些概念
- RBM(受限玻尔兹曼机)
- hdu 4280 Island Transport isap果题
- 【小迪实地】Webdav安全配置相关与漏洞利用
- 加油站
- 什么是计算机
- 第九周项目5-方程也是类
- C++常考面试题
- Java应用程序中的声音播放
- 机器学习 非均衡分类问题
- hdu 2017 字符串统计(java)