首先明确一下:校内的每个学生都有一张床(只是校内的有)

思路 :分析题目发现是求所有在校学生能否全部有床睡(注意:只需在校学生有床睡,及不回家的;这个床可以是自己的,也可以是朋友的);于是,这道题我们可以把它想象成一个二分图,如样例图:

a -> b表示a可以睡b的床(注意:虽然样例中没有2 -> 2的边,但你仔细读题就会发现题目中的原话---

由于题目里给的是一个邻接矩阵,我们便可以无视蓝点所连出去的边,只用红点去搜就行了(代码里写了也不要紧)

代码 :

  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3. using namespace std;
  4. int T, n, head[], num, vis[], choose[], q[], w[], ans, cnt;
  5. struct node
  6. {
  7. int next, to;
  8. }stu[];
  9. inline void add(int x, int y)//链式前向星
  10. {
  11. stu[++num].next = head[x];
  12. stu[num].to = y;
  13. head[x] = num;
  14. return;
  15. }
  16. inline int dfs(int u)//二分图匈牙利算法模板
  17. {
  18. for(register int i = head[u]; i; i = stu[i].next)
  19. {
  20. int k = stu[i].to;
  21. if(vis[k])
  22. {
  23. continue;
  24. }
  25. vis[k] = ;
  26. if(!choose[k] || dfs(choose[k]))
  27. {
  28. choose[k] = u;
  29. return ;
  30. }
  31. }
  32. return ;
  33. }
  34. signed main()
  35. {
  36. scanf("%d", &T);
  37. while(T--)//多组数据
  38. {
  39. memset(choose, , sizeof(choose));//初始化
  40. memset(head, , sizeof(head));
  41. num = ;
  42. ans = ;
  43. cnt = ;
  44. scanf("%d", &n);
  45. for(register int i = ; i <= n; ++i)
  46. {
  47. scanf("%d", &q[i]);
  48. }
  49. for(register int i = ; i <= n; ++i)
  50. {
  51. scanf("%d", &w[i]);
  52. if(q[i] && !w[i])//如果他是本校学生&&他不回家
  53. {
  54. add(i, i);//自己可以睡自己的床
  55. }
  56. }
  57. for(register int i = ; i <= n; ++i)
  58. {
  59. for(register int j = , x; j <= n; ++j)
  60. {
  61. scanf("%d", &x);
  62. if(x)
  63. {
  64. if(q[i])//如果i是本校学生(及有一张床)
  65. {
  66. add(j, i);//j也可以睡
  67. }
  68. if(q[j])//同理
  69. {
  70. add(i, j);
  71. }
  72. }
  73. }
  74. }
  75. for(register int i = ; i <= n; ++i)
  76. {
  77. if(q[i] && w[i])//如果是本校学生&&不留在学校(如果是外校的就不可能回家啊)
  78. {
  79. ++cnt;//记录一下有多少个,以后算答案方便
  80. continue;//不用管他有没有床
  81. }
  82. memset(vis, , sizeof(vis));
  83. if(!dfs(i))//如果有一个学生没有床
  84. {
  85. printf("T_T\n");//哭了
  86. break;
  87. }
  88. else
  89. {
  90. ++ans;//记录有床的学生数量
  91. }
  92. }
  93. if(ans == n - cnt)//如果留学校的人都有床
  94. {
  95. printf("^_^\n");//笑了
  96. }
  97. }
  98. return ;
  99. }

洛谷 P2055 【假期的宿舍】的更多相关文章

  1. 洛谷 - P2055 - 假期的宿舍 - 最大流

    https://www.luogu.org/problemnew/show/P2055 这是一个错误的示范. 一开始觉得就找一条路从外校同学连到本校同学然后最终从周末回家的同学流出,每个人睡后一个人的 ...

  2. 【二分图】洛谷P2055假期的宿舍

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

  3. 洛谷P2055假期的宿舍

    题目 此题主要是考察二分图匹配,而二分图匹配最主要的就是建图,而图一般都是要分成两个部分来分,比如该题就需要先将在学校住的人和床连在一起,因为在学校住就会与一个床.然后每两个人之间假如他们相互认识就可 ...

  4. 洛谷 p2055 假期的宿舍 题解

    好长时间没更博客了 因为实在太蒻了 这让本蒟蒻怎么办 今天终于遇到了一道模板题(之前也有,不过太蒻了都不会) 不过...写代码5分钟,调试2小时 分界线:回归正题 这个就是普通的匈牙利算法 差不多 思 ...

  5. 洛谷P2756飞行员配对方案问题 P2055假期的宿舍【二分图匹配】题解+代码

    洛谷 P2756飞行员配对方案问题 P2055假期的宿舍[二分图匹配] 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架 ...

  6. 洛谷 P2055 [ZJOI2009]假期的宿舍

    洛谷 P2055 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C ...

  7. 洛谷P2055 [ZJOI2009]假期的宿舍

    P2055 [ZJOI2009]假期的宿舍 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A ...

  8. 洛谷——P2055 [ZJOI2009]假期的宿舍

    P2055 [ZJOI2009]假期的宿舍 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 ...

  9. 洛谷 P2055 [ ZJOI 2009 ] 假期的宿舍 —— 二分图匹配

    题目:https://www.luogu.org/problemnew/show/P2055 二分图匹配: 注意要连边的话对方必须有床! 代码如下: #include<iostream> ...

随机推荐

  1. css常用语法续集

    1   设置字体  body{font-familly:“宋体”} 2 可以使用下面代码设置网页中文字的字号为12像素,并把字体颜色设置为#666(灰色): body{font-size:12px;c ...

  2. rabbitMQ_Publish/Subscribe(三)

    发布/订阅 生产者发布信息,多个订阅者可以同时接收到信息. 转发器 现在是时候在RabbitMQ中引入完整的消息传递模式了. 让我们快速了解我们在以前的教程中介绍的内容: 生产者是一个发送消息的应用程 ...

  3. 二、PyTorch 入门实战—Variable(转)

    目录 一.概念 二.Variable的创建和使用 三.标量求导计算图 四.矩阵求导计算图 五.Variable放到GPU上执行 六.Variable转Numpy与Numpy转Variable 七.Va ...

  4. Eclipse "Adb failed to restart !"

    今天遇到这个问题,如图所示: 上网找了下,原来是电脑上的各种手机助手抢占了手机链接.http://blog.csdn.net/zhufuing/article/details/19398125 说得很 ...

  5. 角度转弧度&根据弧度计算圆周上点的坐标的方法

    角度转弧度: #define AngleToRadian(angle) (M_PI/180.0f)*angle 以正东面为0度起点计算指定角度所对应的圆周上的点的坐标: float radian = ...

  6. 【Android】Jetpack中的ViewModel:自动保存页面数据

    目录 ViewModel 简介 ViewModel的使用方法 ViewModel 简介   ViewModel 允许数据在配置更改(如屏幕旋转)后仍然存在,使用 ViewModel 可以免去开发者花费 ...

  7. 通过自制yum源离线安装ansible

    系统环境 --CentOS release 7 python版本--Python 3.5.4   背景:在企业环境中,安装ansible的服务器往往不能访问互联网,简单的下载ansible源码安装,会 ...

  8. 分布式ID系列之为什么需要分布式ID以及生成分布式ID的业务需求

    为什么需要分布式id生成系统 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店.猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID ...

  9. plotly之set_credentials_file问题

    相信了解可视化的同学们都听说过plotly,笔者也是第一次了解这个网站,然后兴冲冲地设置,但是没想到第一次进行在线账号初始化就出现了问题! python3报错为module 'plotly.tools ...

  10. Appium+python自动化(二十八)- 滑呀滑,滑到奈何桥喝碗孟婆汤 - 高级滑动(超详解)

    简介 奈何桥上叹奈何,三生石前憾三生,彼岸花下非彼岸,奈何三生彼岸人. 相传过了鬼门关便上一条路叫黄泉路,路上盛开着只见花,不见叶的彼岸花.花叶生生两不见,相念相惜永相失,路尽头有一条河叫忘川河,河上 ...