zoukankan      html  css  js  c++  java
  • Antenna Placement POJ

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    #include<algorithm>
    const int MAXN= 500000;//最大顶点数
    const int MAXM = 11000;//最大边数
    const int INF=0x3f3f3f3f;
    using namespace std;
    bool used[MAXN];
    int linker[MAXN],index[500][500];
    int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    int tot;
    char s[500][500];
    int e[MAXN*2],ne[MAXN*2],idx,h[MAXN*2];
    void add(int a,int b)
    {
    	e[idx]=b;
    	ne[idx]=h[a];
    	h[a]=idx++; 
    }
    bool dfs(int x){
        for(int i=h[x];i!=-1;i=ne[i]){
        	int v=e[i];
            if(!used[v]){
                used[v]=true;
                if(linker[v]==-1||dfs(linker[v])){
                    linker[v]=x;
                    return true;
                }
            }
        }
        return false;
    }
    int hungry(){
        int res=0;
        memset(linker,-1,sizeof(linker));
        for(int i=0;i<tot;i++){
            memset(used,false,sizeof(used));
            if(dfs(i)) res++;
        }
        return res;
    }
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int n,m;
            idx=0;
            tot=0;
            memset(h,-1,sizeof h);
            memset(index,-1,sizeof(index));
            scanf("%d%d ",&n,&m);
            for(int i=0;i<n;i++){
                gets(s[i]);
                for(int j=0;j<m;j++)
                    if(s[i][j]=='*')
                        index[i][j]=tot++;
            }
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++){
                    if(index[i][j]!=-1){
                        for(int k=0;k<4;k++){
                            int x=i+dir[k][0];
                            int y=j+dir[k][1];
                            if(x>=0&&x<n&&y>=0&&y<m&&index[x][y]!=-1)
                                add( index[i][j],index[x][y] );
                        }
                    }
                }
            }
            int res=hungry();
            printf("%d
    ",tot-res/2);
        }
        return 0;
    }
    
  • 相关阅读:
    Python 购物车程序(文件版)
    Python 购物车程序
    Python多级菜单显示和登录小接口
    ARM体系结构与编程-第五章
    ARM体系结构与编程-第四章
    ARM的IRQ模式和FIQ模式
    C结构体的初始化和赋值
    ARM体系结构与编程-第三章
    函数调用过程分析
    关于STM32-M3/M4的MSP和PSP
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12430825.html
Copyright © 2011-2022 走看看