记录编号 |
73595 |
评测结果 |
AAAAAAAAAA |
题目名称 |
文理分班 |
最终得分 |
100 |
用户昵称 |
苏轼 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.037 s |
提交时间 |
2013-10-22 09:47:41 |
内存使用 |
3.28 MiB |
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("divideb.in");
ofstream fo("divideb.out");
int n,m,pp[51];
int stu[51]={0},home[51]={0},g[51][51]={0};
bool f[51]={true};
bool find(int u)
{
int i;
for(i=1;i<=m;i++)
{
if(g[u][i]==1&&!f[i])
{
f[i]=true;
if(pp[i]==-1||find(pp[i]))
{
pp[i]=u;
return true;
}
}
}
return false;
}
void hungary()
{
int i,j;
for(i=1;i<=m;i++)
{
if(stu[i]==0||(stu[i]==1&&home[i]==0))//不是在校生或者不回家
{
for(j=1;j<=m;j++) f[j]=0;
if(!find(i))
{
fo<<"T_T"<<endl;return;
}
}
}
fo<<"^_^"<<endl;
}
int main()
{
int i,j,k;
fi>>n;
for(i=1;i<=n;i++)
{
fi>>m;
for(j=1;j<=m;j++)
{
fi>>stu[j];
if(stu[j]!=0&&stu[j]!=1)stu[j]=0;
pp[j]=-1;
}
for(j=1;j<=m;j++)
{
fi>>home[j];
if(home[j]!=0&&home[j]!=1) home[j]=0;
}
for(j=1;j<=m;j++)
for(k=1;k<=m;k++)
{
fi>>g[j][k];
if(g[j][k]!=0&&g[j][k]!=1) g[j][k]=0;
if(j==k) g[j][k]=1;
if(stu[k]==0) g[j][k]=0;
}
hungary();
}
return 0;
}