bzoj#P1433. [ZJOI2009]假期的宿舍

[ZJOI2009]假期的宿舍

题目描述

学校放假了,有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。

比如 AABB 都是学校的学生,AA 要回家,而 CC 来看 BBCCAA 不认识。

我们假设每个人只能睡和自己直接认识的人的床,那么一个解决方案就是 BBAA 的床而 CCBB 的床。

而实际情况可能非常复杂,有的人可能认识好多在校学生,在校学生之间也不一定都互相认识。

我们已知一共有 nn 个人,并且知道其中每个人是不是本校学生,也知道每个本校学生是否回家。

问是否存在一个方案使得所有不回家的本校学生和来看他们的其他人都有地方住。

输入格式

第一行一个数 TT 表示数据组数。

接下来 TT 组数据,每组数据第一行一个数 nn 表示涉及到的总人数。

接下来一行 nn 个数,第 ii 个数表示第 ii 个人是否是在校学生(00 表示不是,11 表示是)。

再接下来一行 nn 个数,第 ii 个数表示第 ii 个人是否回家(00 表示不回家,11 表示回家,注意如果第 ii 个人不是在校学生,那么这个位置上的数是一个随机的数,你应该在读入以后忽略它)。

接下来 nn 行每行 nn 个数,第 ii 行第 jj 个数表示 iijj 是否认识(11 表示认识,00 表示不认识,第 iiii 个的值为 00,但是显然自己还是可以睡自己的床),认识的关系是相互的。

输出格式

对于每组数据,如果存在一个方案则输出 ^_^,否则输出 T_T

1
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
ˆ_ˆ

数据规模与约定

对于 100%100\% 的数据,1n501\leq n\leq 501T201\leq T \leq 20