POJ 3020 Antenna Placement

来源:互联网 发布:linux 8080端口被占用 编辑:程序博客网 时间:2024/06/06 20:25
  • Source Code
    #include <iostream>#include <cstring>using namespace std;int map[40+5][10+5], next[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int a[400+5][400+5], match[400+5];bool vis[400+5];int k;bool fin(int x) {    for(int i=1;i<=k;i++) {        if(a[x][i]&&!vis[i]) {            vis[i]=1;            if(!match[i]||fin(match[i])) {                match[i]=x;                return 1;            }        }    }    return 0;}int main() {    int n, m, t;    cin>>t;    while(t--) {        cin>>n>>m;        k=0;        memset(map,0,sizeof(map));        memset(a,0,sizeof(a));        memset(match,0,sizeof(match));        for(int i=1;i<=n;i++)            for(int j=1;j<=m;j++) {            char temp;            cin>>temp;            if(temp=='*') map[i][j]=++k;            }//        for(int i=1;i<=n;i++) {//            for(int j=1;j<=m;j++)//                cout<<map[i][j]<<' ';//            cout<<endl;//        }        for(int i=1;i<=n;i++)            for(int j=1;j<=m;j++)                for(int l=0;l<4;l++){                    int tx=i+next[l][0], ty=j+next[l][1];                    if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&map[i][j]&&map[tx][ty])                        a[map[i][j]][map[tx][ty]]=1;                }        int ans=0;        for(int i=1;i<=k;i++){            memset(vis,0,sizeof(vis));            if(fin(i)) ans++;        }        cout<<k-ans/2<<endl;    }    return 0;}
0 0
原创粉丝点击