题目传送门

  分析:看到这题呢,首先想到的就是搜索,数据范围也不大嘛。但是仔细思考发现这题用搜索很难做,看了大佬们的题解后学到了,这一类题目要用二分图匹配来做。可以知道,如果想要的话,每一个子都可以移动到任意位置(当然会对其他子造成影响),我们还可以发现,每一行或每一列有哪些子其实绝对是固定的,只是它们之间的相对顺序会改变。

  瞎扯了这么多,进入正题吧,首先如果a[i][j]是黑子,那么我们想要得到的目标当然是把它移动到a[i][i],那么他当前的位置就可以看作j,目标位置是i,那么就把j和i之间连一条边,将所有边连接以后发现这其实是个二分图,那么就二分图匹配啊,如果能满足有n个匹配那么就说明目标状态可以达到(这个应该不难想吧)。所以建边以后直接匈牙利算法就OK了。(PS:补充一句,建边的时候别忘了把数组开大点,一开始脑抽忘了,结果RE得非常感人......)

  Code:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<iostream>
  6. #include<iomanip>
  7. #include<algorithm>
  8. const int N=;
  9. int T,n;
  10. int a[N][N],match[N];
  11. int head[N],size;
  12. bool vis[N];
  13. struct Node{
  14. int to,next;
  15. }edge[];
  16. inline int read()
  17. {
  18. char ch=getchar();int num=;bool flag=false;
  19. while(ch<''||ch>''){if(ch=='-')flag=true;ch=getchar();}
  20. while(ch>=''&&ch<=''){num=num*+ch-'';ch=getchar();}
  21. return flag?-num:num;
  22. }
  23. inline void ready()
  24. {
  25. size=;
  26. memset(head,-,sizeof(head));
  27. memset(match,-,sizeof(match));
  28. memset(vis,false,sizeof(vis));
  29. }
  30. inline void add(int x,int y)
  31. {
  32. edge[++size].to=y;
  33. edge[size].next=head[x];
  34. head[x]=size;
  35. }
  36. inline bool dfs(int x)
  37. {
  38. for(int i=head[x];i!=-;i=edge[i].next){
  39. int y=edge[i].to;
  40. if(vis[y])continue;
  41. vis[y]=true;
  42. if(match[y]==-||dfs(match[y])){
  43. match[y]=x;
  44. return true;}}
  45. return false;
  46. }
  47. inline void work()
  48. {
  49. n=read();
  50. for(int i=;i<=n;i++)
  51. for(int j=;j<=n;j++)
  52. a[i][j]=read();
  53. for(int i=;i<=n;i++)
  54. for(int j=;j<=n;j++)
  55. if(a[i][j])add(j,i);
  56. for(int i=;i<=n;i++){
  57. memset(vis,false,sizeof(vis));
  58. if(!dfs(i)){printf("No\n");return;}}
  59. printf("Yes\n");
  60. }
  61. int main()
  62. {
  63. T=read();
  64. while(T--){
  65. ready();
  66. work();}
  67. return ;
  68. }

洛谷P1129 [ZJOI2007] 矩阵游戏的更多相关文章

  1. 洛谷 P1129 [ZJOI2007]矩阵游戏 解题报告

    P1129 [ZJOI2007]矩阵游戏 题目描述 小\(Q\)是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个\(N*N\)黑白方阵进行(如同国际象棋一般 ...

  2. 洛谷P1129 [ZJOI2007]矩阵游戏 题解

    题目链接:https://www.luogu.org/problemnew/show/P1129 分析: 这道题不是很好想,但只要想的出来,代码不成问题. 思路1 举几个例子,我们发现, 对于任何数来 ...

  3. 洛谷 [P1129] [ZJOI2007] 矩阵游戏

    这竟然是一道二分图 乍一看,可能是用搜索做,但是这个数据范围,一定会T. 我们观察发现,无论怎样变换,同一行的一定在同一行,同一列的一定还在同一列.所以说,一行只能配一列.这样,我们的目标就是寻找是否 ...

  4. BZOJ1059或洛谷1129 [ZJOI2007]矩阵游戏

    BZOJ原题链接 洛谷原题链接 通过手算几组例子后,很容易发现,同一列的\(1\)永远在这一列,且这些\(1\)有且仅有一个能产生贡献,行同理. 所以我们可以只考虑交换列,使得每一行都能匹配一个\(1 ...

  5. 【洛谷P1129】矩阵游戏

    题目大意:给定一个 N*N 的矩阵,有些格子是 1,其他格子是 0.现在允许交换若干次行和若干次列,求是否可能使得矩阵的主对角线上所有的数字都是1. 题解:首先发现,交换行和交换列之间是相互独立的.主 ...

  6. 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...

  7. 洛谷P1397 [NOI2013]矩阵游戏

    矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...

  8. 洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)

    题意 题目链接 Sol 感觉做这题只要对矩阵乘法理解的稍微一点就能做出来对于每一行构造一个矩阵A = a 1      0 b列与列之间的矩阵为B = c 1      0 d最终答案为$A^{n - ...

  9. Luogu P1129 [ZJOI2007]矩阵游戏

    题目意思还是比较直观的,而且这个建模的套路也很明显. 我们首先考虑从主对角线可以转移到哪些状态. 由于每一次操作都不会把同一行(列)的黑色方块分开.因此我们发现: 只要找出\(n\)个黑色棋子,让它们 ...

随机推荐

  1. 整数中1出现的次数(从1到n整数中1出现的次数)

    整数中1出现的次数(从1到n整数中1出现的次数) 题目描述 求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下1 ~ 13中包含1的数字有1.10 ...

  2. jQuery对象初始化的传参方式

    jQuery对象初始化的传参方式包括: 1.$(DOMElement) 2.$(' ... '), $('#id'), $('.class') 传入字符串, 这是最常见的形式, 这种传参数经常也传入第 ...

  3. 图论:Prufer编码

    BZOJ1211:使用prufer编码解决限定结点度数的树的计数问题 首先学习一下prufer编码是干什么用的 prufer编码可以与无根树形成一一对应的关系 一种无根树就对应了一种prufer编码 ...

  4. PowerDesigner16连接mysql5.6逆向生成PDM

    一:首先安装ODBC驱动  https://dev.mysql.com/downloads/connector/odbc/  ,安装32位驱动 二:然后配置好ODBC数据源,控制面板\系统和安全\管理 ...

  5. 【bzo1579】拆点+dijkstra优先队列优化+其他优化

    题意: n个点,m条边,问从1走到n的最短路,其中有K次机会可以让一条路的权值变成0.1≤N≤10000;1≤M≤500000;1≤K≤20 题解: 拆点,一个点拆成K个,分别表示到了这个点时还有多少 ...

  6. bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...

  7. 【转载】Quick 中的触摸事件

    原文地址 http://cn.cocos2d-x.org/article/index?type=quick_doc&url=/doc/cocos-docs-master/manual/fram ...

  8. 关于auto-keras训练cnn模型

    # 我在训练自己的人脸分类模型的时候发现图片的维度不能太高,经过很多次测试过后觉得一般人脸图片分为28*28大小训练的效果比较好.建议在使用其训练自己的物体识别模型的时候,尽量把图片压缩到28*28# ...

  9. bzoj 3524 可持久化线段树

    我们可以先离散化,然后建立权值的可持久化线段树,记录每个数出现的次数,对于区间询问直接判断左右儿子的cnt是不是大于(r-k+1)/2,然后递归到最后一层要是还是大于就有,否则不存在. 反思:挺简单一 ...

  10. js常用模板引擎

    baiduTemplate(百度).artTemplate(腾讯).juicer(淘宝).xtemplate.doT.Jade 1.Handlebars 是 JavaScript 一个语义模板库,通过 ...