zoukankan      html  css  js  c++  java
  • HDU 4185 Oil Skimming

    二分图的最大匹配

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<vector>
    using namespace std;
    
    const int MAXN=1505;
    int linker[MAXN];
    bool used[MAXN];
    vector<int>map[MAXN];
    int uN;
    char m[MAXN][MAXN];
    int tt[MAXN][MAXN];
    
    bool dfs(int u)
    {
        for(int i=0;i<map[u].size();i++)
        {
            if(!used[map[u][i]])
            {
                used[map[u][i]]=true;
                if(linker[map[u][i]]==-1||dfs(linker[map[u][i]]))
                {
                    linker[map[u][i]]=u;
                    return true;
                }
            }
        }
        return false;
    }
    
    int hungary()
    {
        int u;
        int res=0;
        memset(linker,-1,sizeof(linker));
        for(u=0;u<uN;u++)
        {
            memset(used,false,sizeof(used));
            if(dfs(u)) res++;
        }
        return res;
    }
    
    
    int main()
    {
        int T;
        int u,k,v;
        int n;
        scanf("%d",&T);
        for(int yy=1;yy<=T;yy++)
        {
            scanf("%d",&n); uN=0;
            memset(tt,-1,sizeof tt);
            for(int i=0;i<MAXN;i++) map[i].clear();
            for(int i=0;i<n;i++)scanf("%s",m[i]);
    
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    if(m[i][j]=='#')
                        tt[i][j]=uN,uN++;
    
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    if(tt[i][j]!=-1)
                    {
                        if(j+1<n&&tt[i][j+1]!=-1) 
                        {
                            map[tt[i][j]].push_back(tt[i][j+1]);
                            map[tt[i][j+1]].push_back(tt[i][j]);
                        }
                        if(i+1<n&&tt[i+1][j]!=-1)
                        {
                            map[tt[i][j]].push_back(tt[i+1][j]);
                            map[tt[i+1][j]].push_back(tt[i][j]);
                        }
                    }
            printf("Case %d: ",yy);
            printf("%d
    ",hungary()/2);
        }
        return 0;
    }
  • 相关阅读:
    CSS position, z-index
    Js闭包函数
    .net 全局配置读取
    redis学习
    .net core websocket
    .net core 部署应用程序注意事项
    signalr网上学习资料
    Cocos Creator 中如果Node在"属性检查器"中active设置为false, 则 onLoad 不会执行
    SVN服务器搭建(一)
    IndentityServer4
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4808003.html
Copyright © 2011-2022 走看看