比赛 |
2019级快乐小组模拟赛19.9.19 |
评测结果 |
AAAAAAAAAA |
题目名称 |
文理分班 |
最终得分 |
100 |
用户昵称 |
leon |
运行时间 |
0.080 s |
代码语言 |
C++ |
内存使用 |
4.59 MiB |
提交时间 |
2019-09-23 20:06:25 |
显示代码纯文本
#include <cstdio>
#include <cstring>
int book[10001];
int match[10001];
int e[101][101];
int rn[10001],ho[10001];
int ans=0,n=0;
bool dfs(int u){
for(int i=1;i<=n;i++)
{
if(book[i]==0 && rn[i]==1 && e[u][i]==1)
{
book[i]=1;
if(match[i]==0 || dfs(match[i])==true)
{
match[i]=u;
return true;
}
}
}
return false;
}
bool work()
{
for(int i=1;i<=n;i++)
{
memset(book,0,sizeof(book));
if((rn[i]==0 || ho[i]==0) && (dfs(i)==false))
{
return false;
}
}
return true;
}
int main()
{ freopen("divideb.in","r",stdin);
freopen("divideb.out","w",stdout);
int t=0;
scanf("%d",&t);
while(t--)
{
ans=0;
memset(book,0,sizeof(book));
memset(match,0,sizeof(match));
memset(rn,0,sizeof(rn));
memset(ho,0,sizeof(ho));
memset(e,0,sizeof(e));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&rn[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&ho[i]);
if(rn[i]==0)
{
ho[i]=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&e[i][j]);
}
if(rn[i]==1)
{
e[i][i]=1;
}
}
if(work()==true)
{
printf("^_^\n");
}
else
{
printf("T_T\n");
}
}
return 0;
}