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;
}
原文地址:https://www.cnblogs.com/lmjer/p/9378056.html