zoukankan      html  css  js  c++  java
  • HDU3549:Flow Problem(最大流入门EK)

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <queue>
    #include <math.h>
    #define inf 0x3f3f3f3f
    using namespace std;
    int map[50][50],v[50],pre[1000];
    int n,m;
    int bfs(int s,int t)
    {
        memset(v,0,sizeof(v));
        memset(pre,-1,sizeof(pre));
        pre[s]=s;
        queue<int>q;
        q.push(s);
        v[s]=1;
        while(!q.empty())
        {
            int tt=q.front();
            q.pop();
            for(int i=1; i<=n; i++)
            {
                if(map[tt][i]&&v[i]==0)
                {
                    v[i]=1;
                    pre[i]=tt;
                    q.push(i);
                    if(i==t)
                    {
                        return 1;
                    }
                }
            }
        }
        return 0;
    }
    int EK(int s,int t)
    {
        int ans=0;
        while(bfs(s,t)==1)
        {
            int min1=inf;
            for(int i=t; i!=s; i=pre[i])
            {
                if(min1>map[pre[i]][i])
                {
                    min1=map[pre[i]][i];
                }
            }
            for(int i=t; i!=s; i=pre[i])
            {
                map[pre[i]][i]-=min1;
                map[i][pre[i]]+=min1;
            }
            ans+=min1;
        }
        return ans;
    }
    int main()
    {
        int T,x,y,z;
        scanf("%d",&T);
        for(int i=1; i<=T; i++)
        {
            scanf("%d%d",&n,&m);
            memset(map,0,sizeof(map));
            while(m--)
            {
                scanf("%d%d%d",&x,&y,&z);
                map[x][y]+=z;
            }
            printf("Case %d: %d
    ",i,EK(1,n));
            EK(1,n);
        }
        return 0;
    }

     #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <queue>
    #include<algorithm>
    #define inf 0x3f3f3f3f
    using namespace std;
    int n,m,tt;
    struct node
    {
        int x,y,c;
        int next;
    }edge[10001];
    int head[101],dis[101];
    void init()
    {
        memset(head,-1,sizeof(head));
        tt=0;
    }
    void add(int xx,int yy,int zz)
    {
        edge[tt].x=xx;
        edge[tt].y=yy;
        edge[tt].c=zz;
        edge[tt].next=head[xx];
        head[xx]=tt++;
        edge[tt].x=yy;
        edge[tt].y=xx;
        edge[tt].c=0;
        edge[tt].next=head[xx];
        head[xx]=tt++;
    }
    int bfs(int s,int t)
    {
         queue<int>q;
         memset(dis,-1,sizeof(dis));
         q.push(s);
         dis[s]=0;
         while(!q.empty())
         {
             int w=q.front();
             q.pop();
             for(int i=head[w];i!=-1;i=edge[i].next)
             {
                 if(dis[edge[i].y]==-1&&edge[i].c>0)
                 {
                     dis[edge[i].y]=dis[w]+1;
                     q.push(edge[i].y);
                 }
             }
         }
        if(dis[t]>=0) return 1;
        return 0;
    }
    int dinic(int x,int maxt)
    {
         int a;
         if(x==n) return maxt;
         for(int i=head[x];i!=-1;i=edge[head[x]].next)
         {
             if(dis[edge[i].y]==x+1&&edge[i].c>0&&(a==min(maxt,edge[i].c)))
             {
                 ,mhgr
             }
         }
    }
    int main()
    {
        int T,xx,yy,zz,ans;
        scanf("%d",&T);
        for(int i=1;i<=T;i++)
        {
            init();
            ans=0;
            scanf("%d%d",&n,&m);
            while(m--)
            {
                scanf("%d%d%d",&xx,&yy,&zz);
                add(xx,yy,zz);
            }
            while(bfs(1,n)==1)
            {
                ans+=dinic(1,inf);
            }
            printf("Case %d: %d ",i,ans);
        }
        return 0;
    }

  • 相关阅读:
    「CF1335E Three Blocks Palindrome」
    「高等数学学习笔记 DAY23」
    「高等数学学习笔记 DAY22」
    「CF911G Mass Change Queries」
    「CF689D Friends and Subsequences」
    「高等数学学习笔记 DAY21」
    「高等数学学习笔记 DAY20」
    「高等数学学习笔记 DAY19」
    「Luogu P6242 【模板】线段树 3」
    【POJ3278】Catch That Cow
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3993589.html
Copyright © 2011-2022 走看看