Wa+TLE 20pts 求条
查看原帖
Wa+TLE 20pts 求条
664034
_xxxxx_楼主2025/8/1 21:24
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 10, mod = 1e9 + 7, inf = 1e12;
inline int read()
{
    char ch = getchar();
    int s = 0, w = 1;
    while(ch < '0' || '9' < ch){ if(ch == '-'){w = -1;} ch = getchar();}
    while('0' <= ch && ch <= '9'){s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();}
    return s * w;
}
int m, n;
int head[N], ne[N], to[N], id = 1, w[N];
void add(int x, int y, int z)
{
    to[++id] = y, ne[id] = head[x], head[x] = id, w[id] = z;
}
int S, T;
int now[N], dis[N];
int q[N], ql, qr;
void bfs(int s)
{
    for(int i = 1; i <= n + n; i++) dis[i] = 1e18;
    dis[q[ql = qr = 1] = s] = 0;
    while(ql <= qr)
    {
        int u = q[ql++];
        for(int i = head[u]; i; i = ne[i])
        {
            int v = to[i];
            if(w[i] && dis[v] == 1e18)
            {
                dis[v] = dis[u] + 1;
                q[++qr] = v;
            }
        }
    }
}
int dfs(int u, int f)
{
    if(u == T) return f;
    int res = f;
    for(int &i = now[u]; i; i = ne[i])
    {
        int v = to[i];
        if(w[i] && dis[v] == dis[u] + 1)
        {
            int t = dfs(v, min(res, w[i]));
            if(t)
            {
                w[i] -= t, w[i ^ 1] += t;
                res -= t;
                if(!res) break;
            }
        }
    }
    return f - res;
}
int dinic()
{
    int ans = 0;
    while(1)
    {
        for(int i = 1; i <= n + n; i++) now[i] = head[i];
        bfs(S + n);
        int f = dfs(S + n, 1e18);
        if(!f) return ans;
        ans += f;
    }
    return -1;
}
void solve()
{
    n = read(), m = read(), S = read(), T = read();
    for(int i = 1; i <= m; i++)
    {
        int x = read(), y = read();
        add(x + n, y, 1e18);
        add(y + n, x, 1e18);
    }
    for(int i = 1; i <= n; i++) add(i, i + n, 1);
    printf("%lld\n", dinic());
}
signed main()
{
	// freopen("graph.in", "r", stdin);
	// freopen("graph.out", "w", stdout);
    int T = 1;
    while(T--) solve();
    return 0;
}

求大佬调一调

2025/8/1 21:24
加载中...