C - Count Connected Components
https://atcoder.jp/contests/abc284/tasks/abc284_c
思路
寻找独立的子连通图个数。
使用map记录边,即点之间的连通性
使用vector记录顶点是否被访问过
使用queue对任意未访问点做bfs遍历, 并记录独立子连通图的个数。
Code
https://atcoder.jp/contests/abc284/submissions/37854694
int n, m; map<int, map<int, bool>> edges; int main() { cin >> n >> m; for(int i=0; i<m; i++){ int u, v; cin >> u >> v; edges[u][v] = true; edges[v][u] = true; } int count = 0; vector<bool> v(n+1, false); while(true){ int ff = 0; for(int i=1; i<=n; i++){ if(v[i] == false){ ff = i; count++; break; } } if (ff == 0){ break; } queue<int> qu; qu.push(ff); while(!qu.empty()){ int first = qu.front(); qu.pop(); if (v[first] == true){ continue; } v[first] = true; for(auto itr: edges[first]){ qu.push(itr.first); } } } cout << count << endl; return 0; }
标签:Count,qu,--,int,edges,Connected,true,first From: https://www.cnblogs.com/lightsong/p/17035021.html