• wind的网络流神模板--【秒过。。】【网络流】


    在被刘汝佳接连坑了两次之后决定不再用刘汝佳的网络流了   
    之后又找了一些模板   发现wind 的最给力了
     1 const int maxn = 405;
     2 const int maxm = maxn * maxn;
     3 const int inf = 1000000000;
     4 
     5 class Dinic {
     6 public :
     7     struct Node {
     8         int u, v, f, next;
     9     }e[maxm];
    10 
    11     int head[maxn], p, lev[maxn], cur[maxn];
    12     int que[maxm];
    13 
    14     void init() {
    15         p = 0; 
    16         memset(head, -1, sizeof(head));
    17     }
    18 
    19     void add(int u, int v, int f) {
    20         e[p].u = u; e[p].v = v; e[p].f = f; e[p].next = head[u]; head[u] = p++;
    21         e[p].u = v; e[p].v = u; e[p].f = 0; e[p].next = head[v]; head[v] = p++;
    22     }
    23 
    24     bool bfs(int s, int t) {
    25         int u, v, qin = 0, qout = 0;
    26         memset(lev, 0, sizeof(lev)); lev[s] = 1; que[qin++] = s;
    27         while(qout != qin) {
    28             u = que[qout++];
    29             for(int i = head[u]; i != -1; i = e[i].next) {
    30                 if(e[i].f > 0 && !lev[v = e[i].v]) {
    31                     lev[v] = lev[u] + 1, que[qin++] = v;
    32                     if(v == t) return 1;
    33                 }
    34             }
    35         }
    36         return 0;
    37     }
    38 
    39     int dfs(int s, int t) {
    40         int i, f, qin, u, k;
    41         int flow = 0;
    42         while(bfs(s, t)) {
    43             memcpy(cur, head, sizeof(head));
    44             u = s, qin = 0;
    45             while(1) {
    46                 if(u == t) {
    47                     for(k = 0, f = inf; k < qin; k++)
    48                         if(e[que[k]].f < f) f = e[que[i=k]].f;
    49                     for(k = 0; k < qin; k++)
    50                         e[que[k]].f -= f, e[que[k]^1].f += f;
    51                     flow += f, u = e[que[qin = i]].u;
    52                 }
    53                 for(i = cur[u]; cur[u] != -1; i = cur[u] = e[cur[u]].next)
    54                     if(e[i].f > 0 && lev[u] + 1 == lev[e[i].v]) break;
    55                 if(cur[u] != -1)
    56                     que[qin++] = cur[u], u = e[cur[u]].v;
    57                 else {
    58                     if(qin == 0) break;
    59                     lev[u] = -1, u = e[que[--qin]].u;
    60                 }
    61             }
    62         }
    63         return flow;
    64     }
    65 };
    66 
    67 Dinic g;
    View Code
  • 相关阅读:
    android之字符串的一些转码
    android之界面一些操作
    日期的一些处理
    android数据的4种存储方式
    第四周学习情况
    第四周作业2
    第四周作业
    第三章学习情况
    第二章学习情况(2020.02.24-2020.03.01)
    个人情况介绍+《人月神话》读后感+本周学习情况(2020.02.17-2020.02.23)
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/4076994.html
Copyright © 2020-2023  润新知