• bzoj1059矩阵游戏


    题目链接

    矩阵快速幂+二分图匹配,

    对于对角线上的每个点看看能不能换到就行,

    但是一开始$dicnic$写挂了

    只好写的匈牙利

    /**************************************************************
        Problem: 1059
        User: zhangheran
        Language: C++
        Result: Accepted
        Time:388 ms
        Memory:1464 kb
    ****************************************************************/
     
    // luogu-judger-enable-o2
    /*
        by Qingnian Su
        2018.7.26
        9:28
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int t;
    int n;
    int map[210][210];
    int dfn[210];
    int alist[210];
    bool ins[210];bool opt;
    bool dfs(int x)
    {
    //  printf("%d
    ",x);
        for(int i=1;i<=alist[x];i++)
          if(!ins[map[x][i]]){
    //      printf("%d %d %d
    ",x,i,map[x][i]);
            ins[map[x][i]]=true;
    //      printf("%d %d
    ",dfn[ins[map[x][i]]],dfs(dfn[map[x][i]]));
            if(!dfn[map[x][i]]||dfs(dfn[map[x][i]])){
              dfn[map[x][i]]=x;return true;}
          }
    //    printf("qwq %d
    ",x);
        return false;
    }
    void clear()
    {
        memset(map,0,sizeof(map));
        memset(dfn,0,sizeof(dfn));
        memset(alist,0,sizeof(alist));
    //  memset(ins,0,sizeof(ins));
        return ;
    }
    int main()
    {
    //  freopen("1.in","r",stdin);
    //  freopen("1.out","w",stdout);
        scanf("%d",&t);
        while(t--){
            clear();
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++)
                scanf("%d",&opt),
                opt=opt==1?map[i][++alist[i]]=j:false;
            for(int i=1;i<=n;i++){
                memset(ins,0,sizeof(ins));
                if(!dfs(i)){puts("No");goto rp;}
            }
            puts("Yes");rp:;
        }
    }
    /*
    1
    2
    1 1 
    1 1 
    */
  • 相关阅读:
    ubuntu安装谷歌浏览器
    Andoid之硬件访问服务1(让Andoid应用程序访问c库)
    JNI intArray
    JNI Hello World
    Ubuntu 14.04 Sublime Text3 Java编译运行(最简单的方法)
    Python中sys.argv的用法
    python连接mysql数据库
    python中join()函数讲解
    python中split()函数讲解
    深度学习入门教程
  • 原文地址:https://www.cnblogs.com/arcturus/p/9374899.html
Copyright © 2020-2023  润新知