zoukankan      html  css  js  c++  java
  • hdu 4185(最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4185

    思路:坐标映射建双向图,只要满足条件构成矩阵,就连边,最后求一下最大匹配即可。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<vector>
     6 using namespace std;
     7 #define MAXN 360036
     8 vector<int>vet[MAXN];
     9 char map[666][666];
    10 bool mark[MAXN];
    11 int n;
    12 int ly[MAXN];
    13 
    14 int dfs(int u){
    15    for(int i=0;i<vet[u].size();i++){
    16       int v=vet[u][i];
    17       if(!mark[v]){
    18          mark[v]=true;
    19          if(ly[v]==-1||dfs(ly[v])){
    20             ly[v]=u;
    21             return 1;
    22          }
    23       }
    24    }
    25    return 0;
    26 }
    27 
    28 int MaxMatch(){
    29    int res=0;
    30    memset(ly,-1,sizeof(ly));
    31    for(int i=1;i<=n*n;i++){
    32       memset(mark,false,sizeof(mark));
    33       res+=dfs(i);
    34    }
    35    return res;
    36 }
    37 
    38 int main(){
    39  //  freopen("1.txt","r",stdin);
    40    int _case,t=1;
    41    scanf("%d",&_case);
    42    while(_case--){
    43       scanf("%d",&n);
    44       for(int i=1;i<=n*n;i++)vet[i].clear();
    45       for(int i=1;i<=n;i++)
    46          scanf("%s",map[i]+1);
    47       for(int i=1;i<=n;i++){
    48          for(int j=1;j<=n;j++){
    49             if(map[i][j]=='.')continue;
    50             if(i+1<=n&&map[i+1][j]=='#'){
    51                vet[(i-1)*n+j].push_back(i*n+j);
    52                vet[i*n+j].push_back((i-1)*n+j);
    53             }
    54             if(j+1<=n&&map[i][j+1]=='#'){
    55                vet[(i-1)*n+j].push_back((i-1)*n+j+1);
    56                vet[(i-1)*n+j+1].push_back((i-1)*n+j);\
    57             }
    58          }
    59       }
    60       int ans=MaxMatch();
    61       printf("Case %d: %d\n",t++,ans/2);
    62    }
    63    return 0;
    64 }
    View Code
  • 相关阅读:
    vr这么火我来看看there.js
    简明现代魔法博客图书馆之php学习记录
    ecshop学习记录
    mysql学习笔记
    linux服务器自动备份mysql数据库
    thinkphp分页及分页样式
    php手册学习(2)
    非常不错的ajax原理总结
    最全的HTTP头部信息分析
    利用curl并发来提高页面访问速度
  • 原文地址:https://www.cnblogs.com/wally/p/3119772.html
Copyright © 2011-2022 走看看