把床的和要床的离散化放到 a,b 里,然后领接矩阵存边,跑匈牙利,全 WA ,求调
#include<bits/stdc++.h>
using namespace std;
bool g[55][55];
int a[55],b[55];
int an,bn,n,T;
int match[55];
bool vis[55];
bool dfs(int u)
{
for(int v=1;v<=bn;v++)
{
if(vis[v])continue;
if(g[a[u]][b[v]])
{
vis[v]=1;
if(!match[v] or dfs(match[v]))
{
match[v]=u;
return 1;
}
}
}
return 0;
}
bool xyl()
{
for(int i=1;i<=an;i++)
{
for(int j=1;j<=bn;j++)vis[j]=0;
if(!dfs(i))return 0;
}
return 1;
}
int x;
int main()
{
cin>>T;
while(T--)
{
an=bn=0;
cin>>n;
for(int i=1;i<=n;i++)match[i]=0;
for(int i=1;i<=n;i++)
{
cin>>x;
if(x)b[++an]=i;
}
for(int i=1;i<=n;i++)
{
cin>>x;
if(x==0)a[++bn]=i;
}
// for(int i=1;i<=an;i++)printf("%d ",a[i]);
// printf("\n");
// for(int i=1;i<=bn;i++)printf("%d ",b[i]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>g[i][j];
if(i==j)g[i][j]=1;
}
}
if(xyl())printf("^_^\n");
else printf("T_T\n");
}
}