URAL 1277 Cops and Thieves 最小割
来源:互联网 发布:暖手宝推荐知乎 编辑:程序博客网 时间:2024/04/30 06:10
#include <bits/stdc++.h>using namespace std;const int maxn = 210;const int maxm = 100010;const int inf = 0x3f3f3f3f;struct G{ int v, cap, next; G() {} G(int v, int cap, int next) : v(v), cap(cap), next(next) {}} E[maxm];int p[maxn], T;int d[maxn], temp_p[maxn], qw[maxn]; //d顶点到源点的距离标号,temp_p当前狐优化,qw队列void init(){ memset(p, -1, sizeof(p)); T = 0;}void add(int u, int v, int cap){ E[T] = G(v, cap, p[u]); p[u] = T++; E[T] = G(u, 0, p[v]); p[v] = T++;}bool bfs(int st, int en, int n){ int i, u, v, head, tail; for(i = 0; i <= n; i++) d[i] = -1; head = tail = 0; d[st] = 0; qw[tail] = st; while(head <= tail) { u = qw[head++]; for(i = p[u]; i + 1; i = E[i].next) { v = E[i].v; if(d[v] == -1 && E[i].cap > 0) { d[v] = d[u] + 1; qw[++tail] = v; } } } return (d[en] != -1);}int dfs(int u, int en, int f){ if(u == en || f == 0) return f; int flow = 0, temp; for(; temp_p[u] + 1; temp_p[u] = E[temp_p[u]].next) { G& e = E[temp_p[u]]; if(d[u] + 1 == d[e.v]) { temp = dfs(e.v, en, min(f, e.cap)); if(temp > 0) { e.cap -= temp; E[temp_p[u] ^ 1].cap += temp; flow += temp; f -= temp; if(f == 0) break; } } } return flow;}int dinic(int st, int en, int n){ int i, ans = 0; while(bfs(st, en, n)) { for(i = 0; i <= n; i++) temp_p[i] = p[i]; ans += dfs(st, en, inf); } return ans;}int main(){ int k, n, m, s, f; while(~scanf("%d", &k)){ init(); scanf("%d %d %d %d", &n,&m,&s,&f); for(int i=1; i<=n; i++){ int x; scanf("%d", &x); add(i, n+i, x); } for(int i=1; i<=m; i++){ int a,b; scanf("%d %d", &a,&b); add(a+n, b, inf); add(b+n, a, inf); } int ans = dinic(f+n, s, 2*n+1); if(ans <= k && s != f) puts("YES"); else puts("NO"); }}
阅读全文
0 0
- URAL 1277 Cops and Thieves 最小割
- Ural 1277 Cops and Thieves(最小点割集/最小割)
- ural 1277. Cops and Thieves【最小割】
- ural 1277. Cops and Thieves【最小割】
- Ural 1277 cops ans thieves (最小割模型)
- Ural 1277 - Cops and Thieves 无向图的最小点割
- Thieves----简单最小割
- uva 1277 Cops and Thieves(完成阻击所需要的最少人数)
- HDU 3491 Thieves | 最小割
- hdu 3491 Thieves 最小割
- hdu 3491 Thieves(最小割)
- HDU 3491 Thieves 拆点 最小割
- hdoj 3491 Thieves 【最小割 + 拆点】
- Thieves (hdu 3491 拆点 最小割)
- URAL 1277 网络流最小割 解题报告
- URAL 1851|GOV-internship|最小割
- UVA 361 Cops and Robbers
- UVa 361 - Cops and Robbers
- DOM1级问题与DOM2级事件
- Android 自定义Dialog实现步骤及封装
- 【鸟哥的Linux私房菜】认识和学习BASH
- Maven 问题,一启动Eclipse之后,Maven更新自动开始,解决。updating maven dependencies
- Java笔记杨枝11.25
- URAL 1277 Cops and Thieves 最小割
- Servlet封装BaseServlet
- Chrome辅助框架CPU占用过多的解决办法
- 【maven】 改变jdk 版本
- spring boot实战(第二篇)事件监听
- 「CodePlus 2017 11 月赛」可做题
- Redux 状态管理2
- “雪人计划”在全球架设IPv6根服务器 中国部署4台
- 一次 Spark SQL 性能提升10倍的经历