zoukankan      html  css  js  c++  java
  • HDU1530 最大流问题

        第一次写Dinic 然后贴一下 最基础的网络流问题 嘎嘎:

    #include <iostream>
    #include<cstdio>
    #include<string.h>
    #include<queue>
    using namespace std;
    const int M=205;
    __int64 map[M][M];
    int n,m,dist[M];
    queue<int>q;
    void readdate()
    {
        __int64 i,a,b,c;
        for(i=0;i<n;i++)
        {
            scanf("%I64d%I64d%I64d",&a,&b,&c);
            map[a][b]+=c;
        }
    }
    bool BFS()
    {
        while(!q.empty()){q.pop();}
        int x,i;
        memset(dist,-1,sizeof(dist));
        q.push(1);
        dist[1]=0;
        while(!q.empty())
        {
            x=q.front();
            q.pop();
            for(i=1;i<=m;i++)
            if(dist[i]<0&&map[x][i]>0)
            {
                dist[i]=dist[x]+1;
                q.push(i);
            }
        }
        if(dist[m]==-1)return 0;
        else return 1;
    
    }
    __int64 min_vual(__int64 a,__int64 b)
    {
        return a>b?b:a;
    }
    __int64 find(int a,__int64 low)
    {
        __int64 aq,i;
        if(a==m)return low;
        for(i=1;i<=m;i++)
        if(dist[a]==dist[i]-1&&map[a][i]>0&&(aq=find(i,min_vual(low,map[a][i]))))
        {
            map[a][i]-=aq;
            map[i][a]+=aq;
            return aq;
        }
        return 0;
    }
    int main()
    {
        __int64 temp,ans;
        while(scanf("%d%d",&n,&m)==2)
        {
            ans=0;
            memset(map,0,sizeof(map));
    
            readdate();
            while(BFS())
            {
                while((temp=find(1,1<<30)))ans+=temp;
            }
            printf("%I64d
    ",ans);
        }
    
        return 0;
    }
    


     

  • 相关阅读:
    布局
    JS基础回顾_滚动条
    JS基础回顾_Dom
    JS语法_其他
    JS语法_类型
    一些免费的API
    CSS特效(一)
    博客园在Markdown中使用JS
    C# 聊一聊屏保的设置 第一步 注册表
    2019 力扣杯-全国高校春季编程大赛 最长重复子串
  • 原文地址:https://www.cnblogs.com/Opaser/p/3662066.html
Copyright © 2011-2022 走看看