HDU - 4289 Control 拆点最大流,领悟拆点的真谛吧!
发布日期:2021-05-10 11:28:40 浏览次数:10 分类:精选文章

本文共 2952 字,大约阅读时间需要 9 分钟。

���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������

  • ���������������������������������������������������������������in���out���

  • ������������������������������������������������������������������������������������������������������u���������u_in���u_out������������������������������������������u���������

  • ���������������������������������������������������������������������������u-v���������������������������������

    • u_out���v_in������������������������
    • v_out���u_in������������������������

    ���������������������������������������������������������������������������

  • ������������

  • ������������������������������n���������m���������s���������t���
  • ������������������������������������������in���out������������������������������������������������������������������
  • ������������������������������������������������������������������������������������������������
  • ���������������

    ������Dinic������������������������������������������������������������������������������������������������������������������������������������������������������������

    ������������

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std; const int maxn = 1010; const int maxe = 500010; int head[maxn], cnt; struct Edge { int v, w; int next; }; ll maxflow; void init() { memset(head, -1, sizeof(head)); cnt = 0; maxflow = 0; } void add(int u, int v, int w) { edge[cnt].v = u; edge[cnt].w = w; edge[cnt].next = head[u]; head[u] = cnt++; } bool bfs() { queue
    q; msger deep[maxn] = 1e9; deep[s] = 0; q.push(s); while (q.size()) { int x = q.front(); q.pop(); for (int i = head[x]; i != -1; i = edge[i].next) { int y = edge[i].v; if (edge[i].w > 0 && deep[y] == 1e9) { deep[y] = deep[x] + 1; q.push(y); if (y == t) return true; } } } return false; } ll dfs(int x, int flow) { if (x == t) return flow; ll ans = 0; for (int i = now[x]; i != -1; i = edge[i].next) { now[x] = i; int y = edge[i].v; if (edge[i].w > 0 && deep[y] == deep[x] + 1) { ll k = dfs(y, min(flow, edge[i].w)); if (k) { ans += k; edge[i].w -= k; edge[i^1].w += k; } } } return ans; } void dinic() { while (bfs()) { int flow = 0; now[s] = head[s]; do { flow = dfs(s, INF); if (!flow) break; } while (flow); maxflow += flow; } } int main() { dfs::IOS(); while ( �������������������������_Same Antique discuss ||-tech concern ������������������������������������ || ������������������az������. } ...

    ������

    ���������������������������������������������������������������Dinic������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

    上一篇:UVA - 10480 Sabotage 输出最小割方案
    下一篇:HDU - 4292 Food 拆点最大流,这题怎么有点熟悉

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月15日 09时44分49秒