BFS 90分求助!(码风优良)

P2853 [USACO06DEC] Cow Picnic S

WA #7 OUTPUT:100 STDOUT:1
by crz_qwq @ 2023-08-22 23:00:26


@[oh_dream_](/user/795344) ``` #include<bits/stdc++.h> #define inf 0x3f3f3f3f typedef long long ll; using namespace std; const int N=1e3+5,M=1e4+5; vector<int>e[N];//邻接表存图 int cow[N]; int cnt[N]; bool vis[N]; queue<int>q; void BFS(int x)//BFS统计这头牛能走到哪些点 { q.push(x);//必然可以走到自己 vis[x]=1; while(!q.empty())//BFS拓展 { int u=q.front(); q.pop(); cnt[u]++;//增加 for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(!vis[v]) { vis[v]=1; q.push(v); } } } } int main() { int k,n,m,ans=0; scanf("%d%d%d",&k,&n,&m); for(int i=1;i<=k;i++)scanf("%d",&cow[i]); for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); e[u].push_back(v); } for(int i=1;i<=k;i++)//统计每一个牛能去的点 { for(int j=1;j<=n;j++)vis[j]=0;//归0 BFS(cow[i]); } for(int i=1;i<=n;i++) if(cnt[i]==k) ans++;//判断这个点是否可行 printf("%d",ans); return 0; } ```
by 小明小红 @ 2023-08-23 08:52:04


@[oh_dream_](/user/795344) 原来代码的43行 $cnt_i\geq k$ 在正常的代码上没有必要,直接改成 $==$ 就可以了,然后是你本来的代码出现了玄学的重复遍历,给他 $vis$ 标记改一下就可以过了
by 小明小红 @ 2023-08-23 08:56:16


@[oh_dream_](/user/795344) 这题数据有环啊
by yhylivedream @ 2023-08-23 09:04:14


@[小明小红](/user/368346) thx,此贴结
by crz_qwq @ 2023-08-23 16:08:37


|