HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1009-Smallest Minimum Cut
2017-09-19 00:38
465 查看
ACM模版
求最小割边数。
描述
题解
原题,直接拷贝代码,改都不用改,就能 AC。求最小割边数。
代码
#include <iostream> #include <cstdio> #include <cstring> using namespace std; typedef long long ll; const int MAXN = 10000; const ll INF = 1ll << 60; const int MOD = 100001; const int MAXM = 500000; int n, m; int level[MAXN], que[MAXN]; int head[MAXN], lon; ll min(ll a, ll b) { if (a < b) { return a; } else { return b; } } struct EDGE { int next, to; ll c; } e[MAXM]; void edgeini() { memset(head, -1, sizeof(head)); lon = -1; } void edgemake(int from, int to, ll c) { e[++lon].c = c; e[lon].to = to; e[lon].next = head[from]; head[from] = lon; } void make(int from, int to, ll c) { edgemake(from, to, c); edgemake(to, from, 0); } bool makelevel(int s, int t) { memset(level, 0, sizeof(level)); int front = 1, end = 0; que[++end] = s; level[s] = 1; while (front <= end) { int u = que[front++]; if (u == t) { return true; } for (int k = head[u]; k != -1; k = e[k].next) { int v = e[k].to; if (!level[v] && e[k].c) { que[++end] = v; level[v] = level[u] + 1; } } } return false; } ll dfs(int now, int t, ll maxf) { if (now == t || maxf == 0) { return maxf; } ll ret = 0; for (int k = head[now]; k != -1; k = e[k].next) { int u = e[k].to; if (level[u] == level[now] + 1 && e[k].c) { ll f = dfs(u, t, min(e[k].c, maxf - ret)); e[k].c -= f; e[k^1].c += f; ret += f; if (ret == maxf) { return ret; } } } if (ret == 0) { level[now] = 0; } return ret; } ll maxflow(int s, int t) { ll ret = 0; while (makelevel(s, t)) { ret += dfs(s, t, INF); } return ret; } int main() { int cas; scanf("%d", &cas); int sum = 0; int s, t; int u, v; ll w; while (cas--) { sum++; scanf("%d%d", &n, &m); scanf("%d%d", &s, &t); edgeini(); for (int i = 1; i <= m; i++) { scanf("%d%d%lld", &u, &v, &w); make(u, v, w * MOD + 1); } printf("%lld\n", maxflow(s, t) % MOD); } return 0; }
相关文章推荐
- 2017 ACM/ICPC Asia Regional Qingdao Online Smallest Minimum Cut 网络流
- HDu 6216 && 2017 ACM/ICPC Asia Regional Qingdao Online 1011
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-补题
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1010-Brute Force Sorting
- 2017 ACM/ICPC Asia Regional Qingdao Online 1009(最大流Dinic算法)
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1001-Apple
- HDU - 6214 Smallest Minimum Cut (2017 ACM-ICPC 亚洲区 (青岛赛区) 网络赛 1009)
- 【2017 ACM/ICPC Asia Regional Qingdao Online 1008】hdu 6213 Chinese Zodiac
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1003-The Dominator of Strings
- hdu 6216 A Cubic number and A Cubic Number (2017 ACM/ICPC Asia Regional Qingdao Online)
- HDU 6216 A Cubic number and A Cubic Number 公式/打表 [2017 ACM/ICPC Asia Regional Qingdao Online]
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1011-A Cubic number and A Cubic Number
- HDU6214 Smallest Minimum Cut 最小割/最少边 [2017 ACM/ICPC Asia Regional Qingdao Online]
- 【2017 ACM/ICPC Asia Regional Qingdao Online 1003】hdu 6208 The Dominator of Strings
- hdu 6206 模板题 2017 ACM/ICPC Asia Regional Qingdao Online
- 2017 ACM/ICPC Asia Regional Qingdao Online 1007 hdu 6212 Zuma 区间dp
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1008-Chinese Zodiac
- 2017 ACM/ICPC Asia Regional Qingdao Online 1007 hdu 6212 Zuma (区间dp)
- HDU 6211 Pythagoras (预处理, 2017 ACM/ICPC Asia Regional Qingdao Online)
- 2017 ACM/ICPC Asia Regional Qingdao Online Brute Force Sorting