for(intnext:adj[cur]){if(next==prev_node)continue;// 꺼낸 노드가 부모 노드인 경우if(vis[next])returnfalse;// 이미 방문했다 == 사이클이 있다......}
3. 전체 코드
#include<bits/stdc++.h>usingnamespacestd;usingpii=pair<int,int>;constintSZ=501;intn,m,u,v,cnt;vector<int>adj[SZ];boolvis[SZ];boolbfs(intstart){queue<pii>q;q.push({start,0});vis[start]=true;while(!q.empty()){piicur=q.front();q.pop();for(intnxt:adj[cur.first]){if(nxt==cur.second)continue;if(vis[nxt])returnfalse;vis[nxt]=true;q.push({nxt,cur.first});}}returntrue;}intmain(){ios::sync_with_stdio(false);cin.tie(NULL);while(++cnt){cin>>n>>m;if(n==0&&m==0)break;for(inti=1;i<=n;i++)adj[i].clear();while(m--){cin>>u>>v;adj[u].push_back(v);adj[v].push_back(u);}intans=0;fill_n(&vis[0],n+1,false);for(inti=1;i<=n;i++){if(vis[i])continue;ans+=bfs(i);}if(ans==0)cout<<"Case "<<cnt<<": No trees.\n";elseif(ans==1)cout<<"Case "<<cnt<<": There is one tree.\n";elsecout<<"Case "<<cnt<<": A forest of "<<ans<<" trees.\n";}return0;}