zoukankan      html  css  js  c++  java
  • bzoj1059 [ZJOI2007]矩阵游戏

    题目描述

    HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。

    输入格式:

    第一行包含一个整数T,表示数据的组数。

    接下来包含T组数据,每组数据第一行为一个整数N,表示方阵的大小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。

    输出格式:

    包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。

    因为同行同列的点无论怎么交换都是同行或同列,所以只要找到是否有n个不同行不同列的点就可以了,匈牙利或者网络流都可以。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define maxn 205
    int map[maxn][maxn];
    int link[maxn];
    bool vis[maxn];
    int n,m,T;
    bool dfs(int x){
        for(int i=1;i<=n;i++){
            if(map[x][i]&&!vis[i]){
                vis[i]=1;
                if(!link[i]||dfs(link[i])){
                    link[i]=x;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main(){
        scanf("%d",&T);
        while(T--){
            int ans=0; 
            scanf("%d",&n);
            memset(map,0,sizeof map);
            memset(link,0,sizeof link);
            int x;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++){
                    scanf("%d",&x);
                    if(x)map[i][j]=1;    
                }
            for(int i=1;i<=n;i++){
                memset(vis,0,sizeof vis);
                if(dfs(i))ans++;
            }
            if(ans==n)puts("Yes");
            else puts("No");
        }
    }
  • 相关阅读:
    Asp.net routing vs Url rewriting
    How to combine WCF Route and MVC Route to work together.
    Servlets beat CGI
    What if you encounter a problem when consume your WCF service ? How to Diagnostic it ?
    uva 4965 Sum the Square
    zoj 3633 Alice's present
    4966 Normalized Form
    ZOJ 3015 Collision Ball Game
    二分图 最小路径覆盖
    uva 2696 Air Raid
  • 原文地址:https://www.cnblogs.com/Elfish/p/8260808.html
Copyright © 2011-2022 走看看