• HDU 1281 棋盘游戏


    题解:将所有的横坐标看作一边的点,纵坐标看作另一边的点,然后二分图匹配即可,建图很巧妙……

    #include <cstdio> 
    #include <cstring> 
    #define maxn 105  
    bool map[maxn][maxn],vis[maxn];  
    int n,m,k,mark[maxn],edge[maxn*maxn][2];  
    bool dfs(int v){  
        for(int i=1;i<=m;i++){  
            if(vis[i]||!map[i][v])  
                continue;  
            vis[i]=true;  
            if(mark[i]==0||dfs(mark[i])){  
                mark[i]=v;  
                return true;  
            }  
        }  
        return false;  
    }    
    int Hungarian(){
        int count=0;  
        memset(mark,0,sizeof(mark));  
        for(int i=1; i<=n; i++){  
            memset(vis,false,sizeof(vis));  
            if(dfs(i)) count++;  
        }  
        return count;  
    }  
    int main(){  
        int i,sum,num=1;  
        while(scanf("%d%d%d",&n,&m,&k)!=EOF){  
            memset(map,false,sizeof(map));  
            for(i=0;i<k;i++){  
                scanf("%d%d",&edge[i][0],&edge[i][1]);  
                map[edge[i][0]][edge[i][1]] = true;  
            }  
            int max=Hungarian();   
            for(i=sum=0;i<k;i++){  
                map[edge[i][0]][edge[i][1]]=false;  
                if(max>Hungarian()) sum++;  
                map[edge[i][0]][edge[i][1]]=true;  
            }  
            printf("Board %d have %d important blanks for %d chessmen.
    ",num++,sum,max);  
        }  
        return 0;  
    } 
    
  • 相关阅读:
    动态规划例题
    c++ 进制转换函数
    约瑟夫问题
    set的基本使用
    stl中的二分查找
    1.生成的接口返回参数不包括系统自带的参数
    查看被锁定的表,并解锁
    添加、修改表中的字段
    NPOI简单示例2—合并表头
    NPOI简单示例
  • 原文地址:https://www.cnblogs.com/forever97/p/3633761.html
Copyright © 2020-2023  润新知