爆零求助

P2055 [ZJOI2009] 假期的宿舍

终于改出来了,感谢大佬未来踏访``` #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


|