网络流

Posted ww123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络流相关的知识,希望对你有一定的参考价值。

技术分享图片
#define Max 250
#define INF 0x3f3f3f3f
int map[Max][Max];
int max_flow(int num,int map[][Max],int source,int sink)//参数含义:结点数量 网络 源点 汇点
{
    int pre[Max],min_flow[Max];//记录结点的父节点 当前路径中最小的一段的值,也即限制值
    int flow[Max][Max];//记录当前网络中的流
    int ans = 0 ;//最终结果
    memset(flow,0,sizeof(flow));
    while(1)//一直循环,直到不存在增广路径
    {
        queue<int> q;
        memset(pre,-1,sizeof(pre));
        q.push(source);
        pre[source] = -2;//源点的父节点需特殊标示
        min_flow[source] = INF;
        while(!q.empty())//BFS寻找增广路径
        {
            int temp = q.front();//出队列
            q.pop();
            for(int i = 0 ; i < num ; i++)//由结点temp往外扩展
            {
                if(pre[i] == -1 && flow[temp][i] < map[temp][i])
                        //当结点i还未被探索到,并且还有可用流量
                {
                    q.push(i);//加入队列
                    pre[i] = temp;//标示父节点
                    min_flow[i] = min(min_flow[temp],map[temp][i]-flow[temp][i]);//求得min_flow
                }
            }
            if(pre[sink]!=-1)//sink的父节点不为初始值,说明BFS已经找到了一条路径
            {
                int k = sink;
                while(pre[k] >= 0)
                {
                    flow[pre[k]][k] +=min_flow[sink];//将新的流量加入flow
                    flow[k][pre[k]] -=min_flow[sink];
                    k = pre[k];
                }
                break;
            }
        }
        if(pre[sink] != -1) 
            ans+=min_flow[sink];
        else
            return ans;//不存在增广路径,返回
    }
}
int main()
{
    int m,n;//n流通数,m为节点数量
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        int a,b,cost;
        memset(map,0,sizeof(map));
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d",&a,&b,&cost);
            map[a-1][b-1]+=cost;//网络
        }
        printf("%d
",max_flow(m,map,0,m-1));
    }
    return 0;
}
最大流

 

以上是关于网络流的主要内容,如果未能解决你的问题,请参考以下文章

此应用小部件片段中所有意图 (PendingIntents) 的逻辑流

使用FFmpeg转录网络直播流

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题