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;
    }
  • 相关阅读:
    JS 笔记
    html笔记 横向两列布局
    jsp HTTP Status 405
    有效范围为request的bean
    jsp:session对象存储数据
    sql笔记
    StringBuffer的用法
    VB学习笔记
    html 笔记
    Linux 笔记
  • 原文地址:https://www.cnblogs.com/aiguona/p/8301478.html
Copyright © 2011-2022 走看看