Skip to content

Commit 312c2bd

Browse files
committed
Solving minor bugs that costed us hours in subregionals and removing unnecessary variables.
1 parent 365c178 commit 312c2bd

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

graphs/dinic.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
struct edge {int a, b, c, f;};
1+
struct edge {int v, c, f;};
22

33
int n, s, t, h[N], ptr[N];
44
vector<edge> e;
55
vector<int> g[N];
66

77
void add_edge (int a, int b, int c) {
88
int k = e.size();
9-
e.push_back({a, b, c, 0});
10-
e.push_back({b, a, 0, 0});
9+
e.push_back({b, c, 0});
10+
e.push_back({a, 0, 0});
1111
g[a].push_back(k);
1212
g[b].push_back(k+1);
1313
}
1414

1515
bool bfs() {
16-
memset(h, 63, sizeof(h));
16+
memset(h, 0, n * sizeof h[0]);
1717
queue<int> q;
18-
q.push(s);
1918
h[s] = 0;
19+
q.push(s);
2020
while(!q.empty()) {
2121
int u = q.front(); q.pop();
2222
for(int i : g[u]) {
23-
int v = e[i].b;
24-
if (e[i].f < e[i].c)
23+
int v = e[i].v;
24+
if (h[v] < 0 and e[i].f < e[i].c)
2525
q.push(v), h[v] = h[u] + 1;
2626
}
2727
}
@@ -31,12 +31,12 @@ bool bfs() {
3131
int dfs (int u, int flow) {
3232
if (!flow) return 0;
3333
if (u == t) return flow;
34-
for (int& i = ptr[u]; i < g[u].size(); ++i) {
35-
edge& dir = e[g[u][i]], rev = e[g[u][i^1]];
36-
int v = dir.b;
37-
34+
for (int &i = ptr[u]; i < g[u].size(); ++i) {
35+
edge &dir = e[g[u][i]], &rev = e[g[u][i]^1];
36+
int v = dir.v;
3837
if (h[v] != h[u] + 1) continue;
39-
int inc = dfs(v, min(flow, dir.c - dir.f));
38+
int inc = min(flow, dir.c - dir.f);
39+
inc = dfs(v, inc);
4040
if (inc) {
4141
dir.f += inc, rev.f -= inc;
4242
return inc;
@@ -48,7 +48,7 @@ int dfs (int u, int flow) {
4848
int dinic() {
4949
int flow = 0;
5050
while (bfs()) {
51-
memset (ptr, 0, n * sizeof ptr[0]);
51+
memset(ptr, 0, n * sizeof ptr[0]);
5252
while (int inc = dfs(s, INF)) flow += inc;
5353
}
5454
return flow;

0 commit comments

Comments
 (0)