帮你修改了一下
```c
#include<bits/stdc++.h>
using namespace std;
int ans,an,l[10001],r[10001],p[100001],a[1001][10001],t,n,a1;
bool vis[10001];
int match(int x)
{
for(int i=1;i<=n;++i)
{
if(a[x][i]&&!vis[i])
{
vis[i]=1;
if(!p[i]||match(p[i]))
{
p[i]=x;
return 1;
}
}
}
return 0;
}
void work()
{
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(p,0,sizeof(p));
memset(a,0,sizeof(a));
an=0,ans=0;
for(int i=1;i<=n;++i)
{
cin>>a1;
if(a1==1)
l[i]=1;
else r[i]=1;
}
for(int i=1;i<=n;++i)
{
cin>>a1;
if(l[i]==1)
{
a[i][i]=1;
if(a1==0)
r[i]=1;
}
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
cin>>a1;
if(a[i][j]!=1&&a1&&l[j]) a[i][j]=1;
}
}
for(int i=1;i<=n;++i)
{
if(r[i])
{
memset(vis,0,sizeof(vis));
if(!match(i))
{
cout<<"T_T"<<endl;
return;
}
}
}
cout<<"^_^"<<endl;
return;
}
int main()
{
cin>>t;
while(t--){
cin>>n;
work();
}
}
```
by anonymous_person @ 2021-07-08 15:22:27
首先你的输入出问题了
题目上说:
"第一行一个数 T 表示数据组数。接下来 T 组数据,每组数据第一行一个数 n 表示涉及到的总人数。"
但是在你的代码中
```c
int main()
{
cin>>t>>n;
while(t--){
work();
}
}
```
你只输入了1个n。
by anonymous_person @ 2021-07-08 15:27:02
然后
你的建图过程也出现了问题
准确地说,在这一段代码中
```c
for(int i=1;i<=n;++i)
{
cin>>a1;
if(a1==1&&l[i]==1)
r[i]=1,a[i][i]=1;
}
```
我认为你的r数组应当表示的是i是否需要床位,r[i]=1时表示需要
by anonymous_person @ 2021-07-08 15:37:21
但是在这一段里,你弄反了。
by anonymous_person @ 2021-07-08 15:38:17
@[lijia123](/user/114288)
by anonymous_person @ 2021-07-08 15:38:40
**非常感谢!**
by lijia123 @ 2021-07-13 21:33:37