10分求助
#include <cmath>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
vector <int> a[100001];
int b[1000001];
int vis[1000001];
bool findv(int t,int ji)
{
if(vis[t] == ji)
{
return false;
}
vis[t] = ji;
for(int i = 0;i < a[t].size();i++)
{
int u = a[t][i];
if(b[u] == 0)
{
b[u] = t;
return true;
}
else
{
if(findv(b[u],ji))
{
b[u] = t;
return true;
}
}
}
}
void lll()
{
memset(b,0,sizeof(b));
memset(vis,0,sizeof(vis));
int n;
scanf("%d",&n);
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
int t;
scanf("%d",&t);
if(t == 1)
{
a[i].push_back(j);
}
}
}
int cnt = 0;
for(int i = 1;i <= n;i++)
{
if(findv(i,i))
{
cnt++;
}
}
if(cnt == n)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
lll();
}
return 0;
}