bzoj1433: [ZJOI2009]假期的宿舍 [二分图][二分图最大匹配]
Description

Input

Output

Sample Input
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 ;
}
bzoj1433: [ZJOI2009]假期的宿舍 [二分图][二分图最大匹配]的更多相关文章
- BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配
BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配 题意: 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回 ...
- BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1005[Submit][Sta ...
- bzoj1433: [ZJOI2009]假期的宿舍(最大二分图匹配)
1433: [ZJOI2009]假期的宿舍 题目:传送门 题解: 这题有点水 跑个二分图匹配就完事了(注意在校生不是一定都互相认识) 代码: #include<cstdio> #inclu ...
- bzoj1433: [ZJOI2009]假期的宿舍
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2286 Solved: 969[Submit][Stat ...
- bzoj1433[ZJOI2009]假期的宿舍(匈牙利)
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2544 Solved: 1074 [Submit][St ...
- bzoj1433 [ZJOI2009]假期的宿舍(最大流)
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1717 Solved: 754[Submit][Stat ...
- bzoj1433 [ZJOI2009]假期的宿舍 最大流
[ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3429 Solved: 1459[Submit][Status][D ...
- BZOJ1433[ZJOI2009]假期的宿舍——二分图最大匹配
题目描述 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回家,而C来看B,C与A不认识.我们假设每个人只能睡和自己直接认 ...
- BZOJ1433 [ZJOI2009]假期的宿舍 二分图匹配 匈牙利算法
原文链接http://www.cnblogs.com/zhouzhendong/p/8372785.html 题目传送门 - BZOJ1433 题解 我们理一理题目. 在校的学生,有自己的床,还可以睡 ...
随机推荐
- Javascript原型对象中的toString
<script> //tostring function Person(name,age,gender){ this.name=name; this.age=age; this.gende ...
- Burnside引理&Pólya定理
Burnside's lemma 引例 题目描述 一个由2*2方格组成的正方形,每个格子上可以涂色或不涂色, 问共有多少种本质不同的涂色方案. (若两种方案可通过旋转互相得到,称作本质相同的方案) 解 ...
- leetcode-159周赛-5231-删除子文件夹
题目描述: 自己的提交: class Solution: def removeSubfolders(self, folder: List[str]) -> List[str]: d = {} r ...
- Servlet - Servlet相关
1. 概念 Servlet是指任何实现了Servlet接口的类, Servlet运行于支持Java的应用服务器中, Servlet可以响应任何类型的请求, 但大多数情况下, Servlet只用来扩展基 ...
- Go 静态类型声明
Go 静态类型声明 package main import "fmt" func main() { var x float64 x = 20.0 fmt.Println(x) fm ...
- flutter 超出俩行点点点
Text( '${listItem["title"]}', overflow: TextOverflow.ellipsis, maxLines: 2, style: TextSty ...
- ps制作浮雕和投影效果
1用文字横排工具写个hope,按住ctrl+t可以调试出文字工具,上面直接用500点来改变文字的大小.2 用矩形选框工具直接可以切割图片的大小,然后双击一个图层,添加样式为浮雕....然后合并图层3 ...
- uoj118 【UR #8】赴京赶考
题目 不难发现我们直接走过去就行了 考虑到第\(i\)行的构造方法就是把\(b\)数组作为模板,每个数和\(a_i\)异或一下就可以了 于是不难发现对于一段连续相等的\(a\),它们在矩阵上就形成了完 ...
- WPF datagrid AutoGenerateColumns隐藏部分列
原文:WPF datagrid AutoGenerateColumns隐藏部分列 <DataGrid x:Name="gridWC" ItemsSource="{B ...
- element-ui表格合计不显示&被遮挡问题
step1:修改全局样式 .el-table{ overflow:visible !important; } .el-card__body { padding: 20px 20px 50px 20px ...