zoukankan      html  css  js  c++  java
  • 最大流KK算法

    最大流KK算法

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #define MAX 0x3f3f3f3f
    using namespace std;
    
    int map[300][300];
    int pre[300];
    int n,m;
    
    int DFS(int s, int t, int f)
    {
        if(s==t)
            return f;//找到终点了,此时剩下的流量就是能获得的流量
        for(int i=1; i<=n; i++)
        {
            if(map[s][i]>0 && pre[i]==0)//从s开始找
            {
                pre[i]=1;
                int d=DFS(i,t,min(f,map[s][i]));//问有没有增广路
                if(d>0)
                {
                    map[s][i] -= d;
                    map[i][s] += d;
                    return d;
                }
            }
        }
        return 0;
    }
    
    int KK(int s, int t)
    {
        int maxflow=0;
        while(true)
        {
            memset(pre, 0, sizeof(pre));
            int f= DFS(s,t,MAX);//不断找s到t的增广路
            if(f == 0)
                return maxflow; //找不到了就回去
            maxflow += f;//找到一个流量f的就赚了
        }
    }
    
    int main()
    {
        while(~scanf("%d %d", &m, &n))
        {
            memset(map,0,sizeof(map));
            int a,b,c;
            for(int i=1; i<=m; i++)
            {
                scanf("%d %d %d", &a, &b, &c);
                map[a][b] += c;
            }
            int ans=KK(1,n);
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    Java实现水仙花数
    CSS3属性选择器
    Word快捷键
    Java实现百钱买百鸡
    某专业人士给中国计算机专业学生的建议
    经典名言警句
    面试问题和思路
    情商
    Java注意的地方
    唯大英雄能真本色——Leo鉴书34
  • 原文地址:https://www.cnblogs.com/aiguona/p/8301478.html
Copyright © 2011-2022 走看看