本蒟蒻习惯用
```cpp
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
```
by YxYe @ 2023-08-10 11:04:12
同求,有答案麻烦也@我一下,谢谢
by ccxswl @ 2023-08-17 10:45:07
@[YxYe](/user/481153) 可以发下你的完整代码吗,我和你问题一样,我改过了
by ccxswl @ 2023-08-17 11:23:23
@[ccxswl](/user/726992)
```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#define ll long long
#define db double
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fp(i,a,b) for(int i=(a);i<(b);i++)
#define de(i,a,b) for(int i=(a);i>=(b);i--)
#define fs(i,u) for(int i=head[u];i;i=nxt[i])
#define pii pair<int, int>
#define pdd pair<db,db>
#define fir first
#define sec second
#define ls (now<<1)
#define rs (now<<1|1)
#define mid ((l+r)>>1)
#define lowbit(x) (x&(-x))
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline int getc(){
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){
int x=0,f=1;char ch=getc();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getc();
}
while(isdigit(ch)){
x=(x<<1)+(x<<3)+(ch^48);
ch=getc();
}
return x*f;
}
const int maxn=1e5+10;
int T,n;
int head[maxn],to[maxn],nxt[maxn],cnt,fa[maxn];
void add_e(int u,int v){
to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
}
bool school[maxn],home[maxn],vis[maxn];
bool dfs(int u){
fs(i,u){
int v=to[i];
if(!vis[i]){
vis[i]=1;
if(!fa[v]||dfs(fa[v])){
fa[v]=u;
return true;
}
}
}
return false;
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
T=read();
while(T--){
memset(fa,0,sizeof(fa));
memset(head,0,sizeof(head));
n=read();
fo(i,1,n)school[i]=read();
fo(i,1,n)home[i]=(read()&&school[i]);
fo(i,1,n){
if(school[i]&&!home[i])add_e(i,i);
fo(j,1,n){
int x=read();
if(x&&school[j])add_e(i,j);
}
}
bool flag=true;
fo(i,1,n){
if(!home[i]){
memset(vis,0,sizeof(vis));
if(!dfs(i)){
flag=false;
break;
}
}
}
if(flag){
puts("^_^");
}else{
puts("T_T");
}
}
return 0;
}
```
by YxYe @ 2023-08-17 20:00:34