记录编号 |
479104 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[ZJOI 2009] 假期的宿舍 |
最终得分 |
100 |
用户昵称 |
Hzoi_moyi |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.063 s |
提交时间 |
2017-12-16 16:22:37 |
内存使用 |
3.31 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int sj=155;
int ca,n,l[sj],h[sj],e;
bool zx[sj],hj[sj],op,a1,f[sj];
struct B
{
int ne,v;
}b[20000];
void add(int x,int y)
{
b[e].v=y,b[e].ne=h[x],h[x]=e++;
}
void init()
{
e=0,op=1;
memset(h,-1,sizeof(h));
memset(l,-1,sizeof(l));
memset(zx,0,sizeof(zx));
memset(hj,0,sizeof(hj));
}
bool d(int x)
{
for(int i=h[x];i!=-1;i=b[i].ne)
if(!f[b[i].v])
{
f[b[i].v]=1;
if(l[b[i].v]==-1||d(l[b[i].v]))
{
l[b[i].v]=x;
return 1;
}
}
return 0;
}
int main()
{
//freopen("t.txt","r",stdin);
freopen("zjoi09holiday.in","r",stdin);
freopen("zjoi09holiday.out","w",stdout);
scanf("%d",&ca);
for(int k=1;k<=ca;k++)
{
init();
scanf("%d",&n);
for(int j=1;j<=n;j++) scanf("%d",&zx[j]);
for(int j=1;j<=n;j++)
{
scanf("%d",&hj[j]);
if(zx[j]&&!hj[j]) add(j,j);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&a1);
if(a1&&zx[i]) add(j,i);
}
for(int i=1;i<=n;i++)
if((!zx[i])||(zx[i]&&!hj[i]))
{
memset(f,0,sizeof(f));
if(!d(i))
{
op=0,printf("T_T\n");
break;
}
}
if(op) printf("^_^\n");
}
return 0;
}