sgu212
来源:互联网 发布:linux如何查看时间 编辑:程序博客网 时间:2024/05/21 11:28
HLPP算法:http://xingzheqiang.blog.163.com/blog/static/20561012520127464654159/
时间复杂度:
#include<cstdio>#include<cstdlib>#include<queue>#include<utility>#include<iostream>#include<algorithm>const int maxn = 1505, maxl = 1505, maxm = 3e5+5, Nya = -1;const int Ni[2] = {-1,1}, INF = 0x3f3f3f3f;struct Edge{ int v, cap, next; Edge(){} Edge(int v,int cap,int next):v(v),cap(cap),next(next){}};std::priority_queue<std::pair<int,int> > heap; int head[maxn], el;Edge edge[maxm<<1];int n, m, L, S, T;int h[maxl], e[maxn];bool hash[maxn];void NewEdge(int u,int v,int w){ edge[++el] = Edge(v,w,head[u]), head[u] = el;}int HLPP_MaxFlow(){ hash[S] = hash[T] = true; for(int i = head[S], p; i ; i = edge[i].next) { e[p = edge[i].v] = edge[i].cap; edge[i+Ni[i&1]].cap += edge[i].cap; if(!hash[p]) { heap.push(std::make_pair(h[p], p)); hash[p] = true; } } while(!heap.empty()) { int u = heap.top().second, min = INF; heap.pop(), hash[u] = false; for(int i = head[u], v; i && e[u]; i = edge[i].next) { if(h[u] == h[v = edge[i].v] + 1 && edge[i].cap) { int flow = std::min(edge[i].cap, e[u]); e[u] -= flow, edge[i].cap -= flow; e[v] += flow, edge[i+Ni[i&1]].cap += flow; if(!hash[v]) { heap.push(std::make_pair(h[v],v)); hash[v] = true; } } if(edge[i].cap) min = std::min(h[v], min); } if(e[u]) { h[u] = min + 1; heap.push(std::make_pair(h[u], u)); hash[u] = true; } }}int main(){#ifndef ONLINE_JUDGE freopen("sgu212.in","r",stdin); freopen("sgu212.out","w",stdout);#endif std::cin >> n >> m >> L; for(int i = 1; i <= n; i++) { scanf("%d",&h[i]); if(h[i] == 1) S = i; if(h[i] == L) T = i; h[i] = L - h[i] + 1; } for(int i = 1, u, v, w; i <= m; i++) { scanf("%d%d%d",&u,&v,&w); NewEdge(u, v, w), NewEdge(v, u, 0); } HLPP_MaxFlow(); for(int i = 1; i <= m; i++) printf("%d\n",edge[i<<1].cap);#ifndef ONLINE_JUDGE fclose(stdin); fclose(stdout);#endif return 0;}
0 0
- sgu212
- sgu212:Data Transmission(HLPP最高标号预留推进)
- 关于Theme的一些学习见解
- Q22 内联函数
- 【开发平台】IntelliJ IDEA 在Google Chrome上不能调试JavaScript错误处理
- android 全透明状态栏
- 如何把自己写的原语加入 内核???
- sgu212
- Uva - 1605 - Building for UN
- 图说java反射续 建议下载图,用画图打开
- JAVA内部类
- Spring中Quartz的配置
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 命令行下mysql
- Eclipse查看Jar包源码乱码问题
- 06_Android中ArrayAdapter的使用