分析:裸匹配,注意清空
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,m;
typedef long long ll;
const int N=305;
int a[N][N],result[N*N];
bool vis[N*N];
inline bool find(int x)
{
fo(i,1,n)
if (!vis[i]&&a[x][i])
{
vis[i]=1;
if (!result[i]||find(result[i]))
{
result[i]=x;
return 1;
}
}
return 0;
}
inline bool pd()
{
fo(i,1,n)
{
memset(vis,0,sizeof(vis));
if (!find(i))return 0;
}
return 1;
}
int main()
{
int cas;
scanf("%d",&cas);
while (cas--)
{
scanf("%d",&n);
memset(result,0,sizeof(result));
memset(a,0,sizeof(a));
fo(i,1,n)
fo(j,1,n)
{
scanf("%d",&a[i][j]);
}
if (pd())printf("Yes\n");
else printf("No\n");
}
return 0;
}