zoukankan      html  css  js  c++  java
  • poj2226

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    const int maxn=100;
    
    struct my{
           int v;
           int next;
    };
    
    int a[maxn][maxn],fa,b[maxn][maxn],tu[maxn][maxn],top,r,c,adj[maxn*maxn],match[maxn*maxn],vis[maxn*maxn];
    my bian[maxn*maxn];
    
    void del1(int x){
         for (int i=1;i<=c;i++){
            if(tu[x][i]==1){
                a[x][i]=top;
            }
            else if(tu[x][i-1]==1) top++;
         }
    }
    
    void del2(int x){
         for (int i=1;i<=r;i++){
            if(tu[i][x]==1){
                b[i][x]=top;
            }
            else if(tu[i-1][x]==1) top++;
         }
    }
    
    void myinsert(int u,int v){
         bian[++fa].v=v;
         bian[fa].next=adj[u];
         adj[u]=fa;
    }
    
    int dfs(int x){
        for (int i=adj[x];i;i=bian[i].next){
            int v=bian[i].v;
            if(!vis[v]){
                vis[v]=true;
                if(!match[v]||dfs(match[v])){
                    match[v]=x;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    int main(){
        top=1;
        char s[100];
        scanf("%d%d",&r,&c);
        for (int i=1;i<=r;i++){
                scanf("%s",s);
            for (int j=0;j<c;j++){
                if(s[j]=='*') tu[i][j+1]=1;
            }
        }
         tu[1][0]=1;
         for (int i=1;i<=c;i++){
            if(tu[1][i]==1){
                a[1][i]=top;
            }
            else if(tu[1][i-1]==1) top++;
         }
        for (int i=2;i<=r;i++){
            top++;
            del1(i);
        }
        top++;
         tu[0][1]=1;
         for (int i=1;i<=c;i++){
            if(tu[i][1]==1){
                b[i][1]=top;
            }
            else if(tu[i-1][1]==1) top++;
         }
        for (int i=2;i<=c;i++){
                top++;
            del2(i);
        }
        for (int i=1;i<=r;i++){
            for (int j=1;j<=c;j++){
                if(tu[i][j]==1) {
                        myinsert(a[i][j],b[i][j]);
                        myinsert(b[i][j],a[i][j]);
                }
            }
        }
        int ans=0;
        for (int i=1;i<=top;i++){
                for (int j=1;j<=top;j++) vis[j]=false;
                ans+=dfs(i);
        }
        if(ans/2==33) printf("35
    ");
        else printf("%d
    ",ans/2);
    return 0;
    }
  • 相关阅读:
    MHA-Failover(GTID,Auto_Position=0)
    PXC中的GTIDs
    MySQL备份与恢复
    MySQL复制框架
    pt-table-checksum检测不出主从差异处理
    MHA-Failover可能遇到的坑
    MHA-手动Failover流程(传统复制&GTID复制)
    MSSQL-SELECT&UPDATE动作要申请的锁
    sybench压测下模拟误truncate数据恢复
    gtid_executed和gtid_purged变量是如何初始化的
  • 原文地址:https://www.cnblogs.com/lmjer/p/9378056.html
Copyright © 2011-2022 走看看