萌新妹子在线求调二分图水题

P2055 [ZJOI2009] 假期的宿舍

```cpp #include<bits/stdc++.h> using namespace std; int n,m,t; //数组开小一点,看看数据范围!!! vector<int>edge[110]; int vis[110],f[110]; bool dfs(int u) { for(int i=0;i<edge[u].size();i++) //for(auto v:e[u]) c++11 以上就可以这么用了 { int v=edge[u][i]; if(!vis[v]) { vis[v]=1; if(!f[v]||dfs(f[v])) return f[v]=u,1; } } return 0; } int k[110],g[110]; void solve() { int sum=0; cin>>n; for(int i=1;i<=n;i++) cin>>k[i]; for(int i=1;i<=n;i++) { cin>>g[i]; if(k[i]==0) g[i]=0; //题目说了不是在校生的人对应的是乱码。因为不在校生肯定要住校,所以要手动赋值为 0 if(k[i]==1&&g[i]==1) sum++; } for(int i=1;i<=n;i++) { if(k[i]==1&&g[i]==0) edge[i].push_back(i+n); //这里,跑路的住校生你直接连边了,应该是不能连的,你可以想一想 for(int j=1;j<=n;j++) { int l; cin>>l; if(l==1&&(k[j]==1&&g[i]==0)) //你这个判定标准有问题啊,只判了 i,那就是所有的 j 都会被连边 { edge[i].push_back(j+n); } } } int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); ans+=dfs(i); } if(ans==n-sum) cout<<"^_^\n"; else cout<<"T_T\n"; //多测要清空!多测要清空!多测要清空!多测要清空!多测要清空!多测要清空! //多测要清空!多测要清空!多测要清空!多测要清空!多测要清空!多测要清空! //多测要清空!多测要清空!多测要清空!多测要清空!多测要清空!多测要清空! for(int i=1;i<=n*2;i++){ edge[i].clear(); f[i]=k[i]=g[i]=0; } } int main() { int T; cin>>T; while(T--) { solve(); } return 0; } ```
by 海盐蒟蒻冻 @ 2023-09-29 11:02:07


@[lonely_cyx](/user/276588) 另外还有一个个人建议,就是发帖的时候尽量不要带“妹子”,不然有可能会被攻击“你也想被抱走吗?”。并且现在妹子也不值钱了,你这么写也不会吸引眼球什么的。别问我怎么知道的。
by 海盐蒟蒻冻 @ 2023-09-29 11:08:12


@[海盐蒟蒻冻](/user/322266) 也不是不可以
by lonely_cyx @ 2023-10-04 08:49:10


|