zoukankan      html  css  js  c++  java
  • Network-Flow

    //Created by pritry
    int graph[MAX][MAX]; //原图
    int source;          //起点,这里为0
    int sink;            //终点,这里为n-1
    int e[MAX];          //余流
    int h[MAX];          //高度
    int n;               //顶点数
    struct Label
    {
        int index;
        friend bool operator < (const Label& a, const Label& b)
        {
            return h[a.index] > h[b.index];
        }
    };
    void Push(int u, int v)
    {
        int df = min(e[u], graph[u][v]);
        graph[u][v] -= df;
        graph[v][u] += df;
        e[u] -= df;
        e[v] += df;
    }
    void Relabel(int u)
    {
        int min_h = INF;
        for(int i = 0; i < n; ++i)
        {
            if(graph[u][i] && h[i] < min_h)
            {
                min_h = h[i];
            }
        }
        h[u] = min_h + 1;
    }
    int HLPP()
    {
        int i;
        Label l;
        priority_queue<Label> Q;
        memset(e, 0, sizeof(e));
        memset(h, 0, sizeof(h));
        h[source] = n;
        for(i = 0; i < n; ++i)
        {
            if(graph[source][i])
            {
                int df = graph[source][i];
                e[source] -= df;
                e[i] += df;
                graph[source][i] -= df;
                graph[i][source] += df;
                l.index = i;
                if(i != source && i != sink) Q.push(l);
            }
        }
        while(!Q.empty())
        {
            l = Q.top();
            Q.pop();
            int u = l.index;
            while(e[u])
            {
                for(i = 0; i < n; ++i)
                    if(graph[u][i] && h[u] > h[i])
                        break;
    
                if(i == n) Relabel(u);
    
                for(i = 0; i < n; ++i)
                {
                    if(h[u] == h[i] + 1 && graph[u][i])
                    {
                        Push(u, i);
                        l.index = i;
                        if(e[i] > 0 && i != source && i != sink) Q.push(l);
                    }
                }
            }
        }
        return e[sink];
    }
  • 相关阅读:
    oracle依据注释查询表信息
    oracle中建表后添加注释
    第四章:联机分析处理olap
    第三节:数据仓库与ODS
    第二节:数据仓库系统的体系结构
    第一节:数据库与数据仓库
    视图
    oracle中生成随机数的方法
    oracle两表中的两列进行模糊匹配的方法
    Oracle基本操作
  • 原文地址:https://www.cnblogs.com/TheRoadToAu/p/8035237.html
Copyright © 2011-2022 走看看