码迷,mamicode.com
首页 > 其他好文 > 详细

[ZJOI2007]矩阵游戏

时间:2019-07-24 19:20:05      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:ble   sizeof   int   二分图   zjoi2007   print   etc   ace   for   

[ZJOI2007]矩阵游戏

题面

链接

题解

把行和列看成二分图的两个点集

目标是要让每行每列都匹配

显然更改行和列不会影响匹配的结果

即行和列最大匹配为N时一定满足

#include<bits/stdc++.h>

using namespace std;

const int MAXN = 500 + 10;

inline int read()
{
    int f=1,x=0;
    char ch;
    do
    {
        ch=getchar();
        if(ch==-) f=-1;
    }while(ch<0||ch>9);
    do
    {
        x=(x<<3)+(x<<1)+ch-0;
        ch=getchar();
    }while(ch>=0&&ch<=9);
    return f*x;
}

int t;
int n;
int g[MAXN][MAXN];
int vis[MAXN];
int li[MAXN];

inline bool dfs(int x)
{
    if(x==0) return 1;
    for(int i=1;i<=n;i++)
    {
        if(g[x][i]&&!vis[i])
        {
            vis[i]=1;
            if(dfs(li[i]))
            {
                li[i]=x;
                return 1;
            }
        }
    }
    return 0; 
}

int main()
{
    t=read();
    while(t--)
    {
        n=read();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                g[i][j]=read();
        int ans=0;
        for(int i=1;i<=n;i++)
        {    
            memset(vis,0,sizeof(vis));
            if(dfs(i)) ans++;
        }
        memset(li,0,sizeof(li));
        if(ans==n) printf("Yes\n");
        else printf("No\n");
    }
}

 

[ZJOI2007]矩阵游戏

标签:ble   sizeof   int   二分图   zjoi2007   print   etc   ace   for   

原文地址:https://www.cnblogs.com/wlzs1432/p/11240151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!