为啥错了
#include<bits/stdc++.h>
using namespace std;
bool vis[52];
bool f[52];
int a[52][52];
int lol[52][52];
bool pr[52];
int match[52];
int n,t;
bool dfs(int x){//chuang
for(int i=1;i<=n;i++){
if(!pr[i]&&lol[x][i]&&vis[i]){
pr[i]=true;
if(match[i]==0||dfs(match[i])){
match[i]=x;
return true;
}
}
}
return false;
}
int main(){
scanf("%d",&t);
for(int i=1;i<=t;i++){
scanf("%d",&n);
int l=n;
for(int j=1;j<=n;j++){
int k;
scanf("%d",&k);
if(k==0) vis[j]=false;//school
else vis[j]=true;
}
for(int j=1;j<=n;j++){
int op;
scanf("%d",&op);
if(vis[j]==false) f[op]=1;
else{
f[op]=op;
}
}
for(int p=1;p<=n;p++){
for(int q=1;q<=n;q++){
cin>>a[p][q];
lol[p][q]=a[p][q];
if(vis[p]==true){
lol[p][p]=1;
}
}
}
int sum=0;
bool flag=false;
for(int j=1;j<=n;j++){
memset(pr,false,sizeof(pr));
if(vis[j]==false&&f[j]==0){
if(!dfs(i)){
cout<<"T_T";
flag=true;
break;
}
}
}
if(flag==false)cout<<"^_^";
}
return 0;
}