zoukankan      html  css  js  c++  java
  • 洛谷 P1129 [ZJOI2007]矩阵游戏

    传送门

    还是那句话,二分图最大匹配的题难点在你能否可以看出这个题是二分图匹配和如何建图上。

    这道题就很难看出是个二分图最大匹配问题。

    仔细考虑一下,可以交换任意的两行,也可以交换任意的两列。

    对于任意两个黑方块,如果它们本来在同一行,那么不管怎么交换,它们都会在同一行(列同理)。

    而我们一行上只需要特定的那一列是黑就完事了,其他有没有我不care(列同理)

    这不就是二分图的匹配问题了嘛。

    所以直接上匈牙利算法或跑网络流就完事儿了。

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #define N 210
    using namespace std;
    int T,n,g[N][N],nxt[N],vis[N];
    
    bool match(int u){
        for(int i=1;i<=n;i++)
            if(g[u][i]&&!vis[i]){
                vis[i]=1;
                if(!nxt[i]||match(nxt[i])){
                    nxt[i]=u;
                    return true;
                }
            }
        return false;
    }
    
    int main(){
        scanf("%d",&T);
        while(T--){
            memset(g,0,sizeof(g));
            memset(nxt,0,sizeof(nxt));
            int tot=0;
            scanf("%d",&n);
            for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&g[i][j]);
            for(int i=1;i<=n;i++) {
                memset(vis,0,sizeof(vis));
                tot+=match(i);
            }
            if(tot==n) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    编程语言的简介
    ava 8 stream的详细用法
    Java 8 Steam 例子整理
    redis常用命令
    常用正则表达式
    保留一些常用文章
    tag的简单使用
    GitFlow详解教程
    Git基本命令和GitFlow工作流
    Redis 2.8.18 安装报错 error: jemalloc/jemalloc.h: No such file or directory
  • 原文地址:https://www.cnblogs.com/BakaCirno/p/11734064.html
Copyright © 2011-2022 走看看