zoukankan      html  css  js  c++  java
  • POJ 2914 Minimum Cut 全局最小割

    裸的全局最小割了吧 有重边,用邻接矩阵的时候要小心

    #include<iostream>
    #include<cstdio>
    #include<bitset>
    #include<cstring>
    #define MOD 1000000007
    #define maxn 509
    using namespace std;
    int a[590][590],wage[maxn],in[maxn],vis[maxn];
    int n,x,y,v;
    int find(int& s,int& t)
    {
        int max_flow,u=0;
        memset(vis,0,sizeof(vis));
        memset(wage,0,sizeof(wage));
        s=t=-1;
        int uu=n;
        while(uu--)
        {
            int maxx=-0x3f3f3f3f;
            for(int i=1;i<=n;i++)if(!vis[i] && !in[i] && maxx < wage[i])
            maxx = wage[u=i];
            vis[u]=1;
            if(u==t)return max_flow;
            max_flow = maxx;
            s = t; t = u;
            for(int i=1;i<=n;i++)if(!vis[i] && !in[i])wage[i]+=a[u][i];
        }
        return max_flow;
    }
    int main()
    {
        int m,k;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(in,0,sizeof(in));
            memset(a,0,sizeof(a));
            for(int i=1;i<=m;i++)
            {
                scanf("%d%d%d",&x,&y,&v);
                x++;y++;
                a[x][y]+=v;
                a[y][x]+=v;
            }
            int s,t,ans = 0x3f3f3f3f;
            for(int i=1;i<n;i++)
            {
                int u = find(s,t);
                in[t]=1;
                ans = min(ans,u);
                for(int j=1;j<=n;j++)if(!in[j] && j !=s)
                {
                    a[s][j]+=a[t][j];
                    a[j][s]+=a[j][t];
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    卸载office密钥的命令
    断言的使用
    stm32的NVIC是什么?
    STM32 Cube mx 安装
    不用移位计算获得高位数据
    分组数据
    Vue Router
    存储过程
    js 中 json.stringfy()将对象、数组转换成字符串
    js中 json对象的转化 JSON.parse()
  • 原文地址:https://www.cnblogs.com/philippica/p/4518491.html
Copyright © 2011-2022 走看看