终于改出来了,感谢大佬未来踏访```
#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int T,n;
int bac[maxn],w[maxn][maxn],py[maxn];
bool stu[maxn],rela[maxn][maxn],vy[maxn];
template<class type>const void read(type &in)
{
in=0;
int f=1;
char ch=getchar();
while(ch<48||ch>57)
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>47&&ch<58)
{
in=(in<<1)+(in<<3)+(ch&15);
ch=getchar();
}
in*=f;
return;
}
bool find(int u)
{
for(int i=1;i<=n;i++)
{
if(stu[i]&&w[u][i])
{
if(!vy[i])
{
vy[i]=1;
if(!py[i]||find(py[i]))
{
py[i]=u;
return true;
}
}
}
}
return false;
}
void in()
{
read(n);
for(int i=1;i<=n;i++)read(stu[i]);
int white;
for(int i=1;i<=n;i++)
if(stu[i])read(bac[i]);
else read(white);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
read(rela[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(bac[i]!=1)
if(stu[j])
if(rela[i][j]||i==j)w[i][j]=1;
}
void solve()
{
for(int i=1;i<=n;i++)
{
if(bac[i]==1)continue;
memset(vy,0,sizeof(vy));
if(!find(i))
{
cout<<"T_T"<<'\n';
return;
}
}
cout<<"^_^"<<'\n';
return;
}
void reset()
{
memset(py,0,sizeof(py));
memset(w,0,sizeof(w));
memset(bac,0,sizeof(bac));
memset(rela,0,sizeof(rela));
memset(stu,0,sizeof(stu));
}
int main()
{
read(T);
while(T)
{
in();
solve();
reset();
T--;
}
}
```
by Main_WF @ 2021-07-23 19:24:34