记录编号 61028 评测结果 WAWWWWAWWW
题目名称 文理分班 最终得分 20
用户昵称 Gravatar徐王 是否通过 未通过
代码语言 C++ 运行时间 0.043 s
提交时间 2013-06-02 21:23:12 内存使用 0.34 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const max_point=52;
int clas[max_point],futur[max_point],a[max_point][max_point];
int map[max_point][max_point];//第一个是人,第二个是位置;
int ansnum,ans,n,asd;
int father[max_point];
bool vis[max_point];
bool find(int x)
{
	for(int i=1;i<=n;i++)
	{
		if(!vis[i]&&map[x][i])
		{
			vis[i]=1;
			if(!father[i]||find(father[i]))
			{
				father[i]=x;
				return 1;
			}
		}
	}
	return 0;
}
int main()
{
	freopen("divideb.in","r",stdin);
	freopen("divideb.out","w",stdout);
	scanf("%d",&asd);
	while(asd--)
	{
		scanf("%d",&n);ansnum=n;ans=0;
		for(int i=1;i<=n;i++)
			scanf("%d",&clas[i]);
		for(int i=1;i<=n;i++)
			scanf("%d",&futur[i]);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
			{
				scanf("%d",&a[i][j]);
				if(i==j)map[i][j]=1;
				if(a[i][j])map[i][j]=1;
			}
		for(int i=1;i<=n;i++)
		{
			if(futur[i]&&clas[i])
			{
				ansnum--;
				for(int j=1;j<=n;j++)
					map[i][j]=0;
			}
			if(!clas[i])
			{
				for(int j=1;j<=n;j++)
					map[j][i]=0;
			}
		}
		memset(father,0,sizeof(father));
		for(int i=1;i<=n;i++)
		{
			memset(vis,0,sizeof(vis));
			if(find(i))
				ans++;
		}
		if(ans==ansnum)cout<<"^_^"<<endl;
		else cout<<"T_T"<<endl;
	}
	fclose(stdin);fclose(stdout);
	return 0;
}