题目链接:https://www.luogu.org/problemnew/show/P1129

分析:

这道题不是很好想,但只要想的出来,代码不成问题。

思路1

举几个例子,我们发现,

对于任何数来说,同一行的永远在同一行,同一列的永远在同一列

进一步研究,发现所有行所有列要有1,且至少要有n个1两两不同行不同列

对于每个111,设坐标为(x,y)(x,y)(x,y),那么xxx行向yyy列连边

判断是否有完全匹配(都能匹配上),能匹配上就可以

思路2

这个就是比较拓展的思路了,如果你学了高等数学的话,应该知道有个叫行列式的东西(百度一下?),我们只需判断行列式是否等于0(每一个矩阵中的数字都乘上除去这一行这一列的其他所有数),即可求得答案。

PS:由于作者对此了解有限,讲述不对之处欢迎提出!

代码:

  1. #include<cstdio>
  2. #include<vector>
  3. #include<cstring>
  4. using namespace std;
  5. vector<int>e[205];
  6. int link[205];
  7. int vis[205];
  8. int t;
  9. int find(int x)
  10. {
  11. for(int i=0;i<e[x].size();i++)
  12. {
  13. int p=e[x][i];
  14. if(vis[p]!=t)
  15. {
  16. vis[p]=t;
  17. if(!link[p]||find(link[p]))
  18. {
  19. link[p]=x;
  20. return 1;
  21. }
  22. }
  23. }
  24. return 0;
  25. }
  26. int main()
  27. {
  28. int T,n,tmp,cnt;
  29. scanf("%d",&T);
  30. while(T--)
  31. {
  32. cnt=0;
  33. t=0;
  34. memset(vis,0,sizeof(vis));
  35. memset(link,0,sizeof(link));
  36. scanf("%d",&n);
  37. for(int i=1;i<=n;i++)
  38. e[i].clear();
  39. for(int i=1;i<=n;i++)
  40. {
  41. for(int j=1;j<=n;j++)
  42. {
  43. scanf("%d",&tmp);
  44. if(tmp==1)
  45. {
  46. e[i].push_back(j);
  47. }
  48. }
  49. }
  50. for(int i=1;i<=n;i++)
  51. {
  52. t++;
  53. if(find(i))
  54. {
  55. cnt++;
  56. }
  57. else
  58. break;
  59. }
  60. if(cnt==n)
  61. {
  62. printf("Yes\n");
  63. }
  64. else
  65. printf("No\n");
  66. }
  67. return 0;
  68. }

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

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

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

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

    题目传送门 分析:看到这题呢,首先想到的就是搜索,数据范围也不大嘛.但是仔细思考发现这题用搜索很难做,看了大佬们的题解后学到了,这一类题目要用二分图匹配来做.可以知道,如果想要的话,每一个子都可以移动 ...

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

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

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

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

  5. 【洛谷P1129】矩阵游戏

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

  6. BZOJ1059:[ZJOI2007]矩阵游戏——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1059 https://www.luogu.org/problemnew/show/P1129 小Q是 ...

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

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

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

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

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

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

随机推荐

  1. VS中添加第三方库及相对路径设置

    原文 VS中添加第三方库及相对路径设置 对于一些第三方的SDK,一般会包含头文件(*.h),静态库文件(*.lib)和动态库文件(*.dll). 1.  文件位置:为了提高程序的可移植性,将第三库放在 ...

  2. ASP.NET MVC控制器Controller

    控制器的定义 MVC模式下的控制器(Controller)主要负责响应用户的输入,并且在响应时可能的修改模型(Model). 之前的URL访问,通常是通过指定服务器的路径来实现,如访问URL:http ...

  3. QT 强制杀死进程

    bool KillProcess(QString ProcessName){  bool result = false; QString str1; HANDLE hSnapShot = Create ...

  4. C++与QML混合编程实现2048

    http://blog.csdn.net/ieearth/article/details/42705305

  5. Linux ssh及远程连接工具

    putty:http://www.so.com/link?url=http%3A%2F%2Fsoftdl.360tpcdn.com%2FPuTTY%2FPuTTY_0.67.zip&q=put ...

  6. Java基础(六) static五大应用场景

    static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.上一个章节我们讲了final关键字的原理及用法,本 ...

  7. ORACLE(emp)表习题与答案

    因为答案都是小编自己写的,解法可能有多种,如果您觉得我的解法有误,希望您有时间给我留言. 一.习题 (1) 查询20部门的所有员工信息. SELECT * FROM emp where deptno ...

  8. Android开发之旅(1) 之 Android 开发环境搭建

    工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html Android开发之旅目录 1 前言 很多朋友 ...

  9. ZooKeeper 系列(三)—— Zookeeper常用 Shell 命令

    一.节点增删改查         1.1 启动服务和连接服务         1.2 help命令         1.3 查看节点列表         1.4 新增节点         1.5 查看 ...

  10. 先订一个小目标,把微信小程序搞懂

    目标:系统性学习微信小程序. 第一阶段:熟悉微信小程序及前端开发(结合web前端学习) 第二阶段:了解设计及后端 第三阶段:学习后端.