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;
    }
  • 相关阅读:
    work_7_Boolean和boolean,基本类型和包装类型
    work_06_服务器上传图片错误
    work_05_64未随机id生成器
    work_04_谷歌验证码工具Kaptcha
    vue.js_13_vue的搭建
    每日一java(割草机)
    work_03_常见jq问题处理
    work_02_css样式
    java 27
    java 27
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4808003.html
Copyright © 2011-2022 走看看