Description

Input

Output

Sample Input

1
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0

Sample Output

ˆ ˆ

HINT

对于30% 的数据满足1 ≤ n ≤ 12。
对于100% 的数据满足1 ≤ n ≤ 50,1 ≤ T ≤ 20。


最近被二分图到底要用邻接矩阵还是邻接表搞得十分分裂。。

还是看图的稠密程度吧???

这题的建图十分经典,对于每一个本校学生对自己的床连边,其他连边同输入的矩阵。

本质虽然是匈牙利算法求二分图最大匹配,事实上不用把最大匹配求出来,只要增广到对于一个需要住校的人没有床睡就好了。

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; const int maxn=;
int T,n,n_l,n_r;
int E[maxn][maxn],stu[maxn],hom[maxn],mat[maxn];
bool check[maxn]; bool dfs(int x){
for(int i=;i<=n_r;i++)
if(stu[i]&&E[x][i]&&!check[i]){
check[i]=;
if(mat[i]==-||dfs(mat[i])){
mat[i]=x;
return ;
}
}
return ;
} bool hungary(){
memset(mat,-,sizeof mat);
for(int i=;i<=n;i++){
memset(check,,sizeof check);
if(!hom[i]&&!dfs(i)) return ;
}
return ;
} void init(){
scanf("%d",&n); n_l=n_r=n;
for(int i=;i<=n;i++) scanf("%d",&stu[i]);
for(int i=;i<=n;i++){
scanf("%d",&hom[i]);
if(!stu[i]) hom[i]=;
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
scanf("%d",&E[i][j]);
if(stu[i]) E[i][i]=;
}
} int main(){
scanf("%d",&T);
while(T--){
init();
puts(hungary()?"^_^":"T_T");
}
return ;
}

最新文章

  1. centos7 docker redis
  2. ganglia安装简记
  3. docker图形界面工具
  4. [团队项目]expat不兼容BUG
  5. thinkphp中curl的使用,常用于接口
  6. 打造属于自己的Altium Designer 3D封装库,不需要懂专门的三维设计软件
  7. Python 变量有效范围
  8. python-cmp()的使用
  9. linux下mongodb安装、服务器、客户端、备份、账户命令
  10. Java 疑问自问自答
  11. Mysql表结构导出excel(含数据类型、字段备注注释)
  12. svn 恢复删除文件
  13. Ajax使用formdata异步上传文件,报错the request was rejected because no multipart boundary was found
  14. Scala进阶之路-Spark独立模式(Standalone)集群部署
  15. Linux上统计文件夹下文件个数以及目录个数
  16. Django的视图函数和路由系统中一些没有用过的小点
  17. js-ES6学习笔记-Generator函数
  18. 我为什么要学Go语言
  19. mysql_use_result &amp; mysql_store_result &amp; MYSQLI_ASYNC
  20. 洛谷P1129 [ZJOI2007] 矩阵游戏

热门文章

  1. Jmeter 请求参数中包含 MD5 加密的密码
  2. uniq - 删除排序文件中的重复行
  3. PagedLOD模型对象选择关键技术点
  4. SpringDataJpa实现自定义(更新)update语句
  5. delphi 压缩
  6. NX二次开发-创建直线(起点-向量方向-长度)UF_CURVE_create_line
  7. csp-s模拟测试95
  8. 一幅图解决R语言绘制图例的各种问题
  9. XDTIC2019招新笔试题 + 官方解答
  10. nodejs中命令行和node交互模式的区分