蒟蒻初学,爆零,不知错哪

P2055 [ZJOI2009] 假期的宿舍

帮你修改了一下 ```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


|