代码
// Problem: P3376 【模板】网络最大流
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3376
// Memory Limit: 128 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
#define p_b push_back
#define ft first
#define nd second
#define pii pair<int, int>
#define pll pair<long long, long long>
using namespace std;
typedef long long ll;
ll n, m, s, t, d[5005], cur[5005];
bool mark[5005];
struct graph
{
ll to, &cap, &val;//起点,终点,容量,流量
};
vector<graph> edge[505];
// vector<ll> g[505];
void add(ll u, ll v, ll w)
{
auto p = new ll(w), q = new ll(0);
edge[u].p_b({v, *p, *q});
edge[v].p_b({u, *q, *p});
}
bool bfs()
{
queue<ll> q;
// memset(d, 0, sizeof(d));
memset(mark, 0, sizeof(mark));
q.push(s), d[s] = 0 , mark[s] = 1;
while (!q.empty())
{
ll hd = q.front();
q.pop();
for (int i = 0; i < edge[hd].size(); i++)
{
graph &e = edge[hd][i];
if (!mark[e.to] && e.cap > e.val)
{
mark[e.to] = true;
q.push(e.to);
d[e.to] = d[hd] + 1;
}
}
}
return mark[t];
}
ll dfs(ll x, ll a)
{
if (x == t && !a)
return a;
ll flow = 0, f;
for (ll i = cur[x]; i < edge[x].size(); i++)
{
cur[x] = i;
graph &e = edge[x][i];
if (d[e.to] == d[x] + 1 &&
(f = dfs(e.to, min(a, e.cap - e.val))) > 0)
{
e.val += f;
edge[x][e.to ^ 1].val -= f;
flow += f;
a -= f;
if (!a) break;
}
}
return flow;
}
ll maxflow()
{
ll flow = 0;
while (bfs())
{
memset(cur, 0, sizeof(cur));
flow += dfs(s, 1145141919810);
}
return flow;
}
int main()
{
cin >> n >> m >> s >> t;
for (int i = 1; i <= m; i++)
{
ll u, v, c;
cin >> u >> v >> c;
add(u, v, c);
}
cout << maxflow();
return 0;
}
死循环。我没有找到bug所在,求助