• [ZJOI2007]矩阵游戏


    [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
    ");
            else printf("No
    ");
        }
    }
  • 相关阅读:
    腾讯2面
    腾讯1面
    快手2面
    快手1面
    formData+ajax文件上传
    nginx限流&健康检查
    jvm crash分析
    Spring Cloud Gateway整合Eureka
    k8s-应用部署
    dockerfile-maven plugin自动镜像制作并发布
  • 原文地址:https://www.cnblogs.com/wlzs1432/p/11240151.html
Copyright © 2020-2023  润新知