Stay Hungry,Stay Foolish!

C - Count Connected Components -- ATCODER

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;
}
 

 

posted @ 2023-01-08 18:01  lightsong  阅读(33)  评论(0编辑  收藏  举报
Life Is Short, We Need Ship To Travel