[規格]1724接続要素の数


バックエンド11724接続要素数

  • https://www.acmicpc.net/problem/11724

  • グラフィックのすべての頂点にアクセスするには、DFSが何回呼び出されるかを数えるだけです.
  • #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int N, M;
    
    vector<vector<int>> adj(1001);
    vector<bool> visited;
    
    void dfs(int here) {
    	visited[here] = true;
    
    	for (int i = 0; i < adj[here].size(); ++i) {
    		int there = adj[here][i];
    		if (!visited[there]) 
    			dfs(there);
    	}
    }
    
    int dfsAll() {
    	visited = vector<bool>(N, false);
    
    	//모든 정점이 방문될 때까지 dfs를 호출해야하는 횟수
    	int cnt = 0;
    	for (int i = 0; i < N; ++i) {
    		if (!visited[i]) {
    			dfs(i);
    			++cnt;
    		}
    	}
    	return cnt;
    }
    
    int main() {
    	ios_base::sync_with_stdio(false);
    	cin.tie(NULL);
    	cout.tie(NULL);
    
    	cin >> N >> M;
    	for (int i = 0; i < M; ++i) {
    		int a, b;
    		cin >> a >> b;
    
    		adj[a - 1].push_back(b - 1);
    		adj[b - 1].push_back(a - 1);
    	}
    
    	cout << dfsAll();
    	return 0;
    }
    関連する問題

  • 白駿4963島個数、白駿2267園区番号

  • これらの問題は以前幅優先探索(BFS)の処理時に解いたことがある
    https://velog.io/@sunjoo9912/TIL-21-07-25#-bfs-%EC%98%81%EC%97%AD-%ED%83%90%EC%83%89

  • グラフィックのすべての頂点にアクセスするには、BFSを何回呼び出す必要がありますか?3つのグラフィックに接続された要素の数を求めることができます
  • 📌 参考資料
  • 図面における接続要素(構成部品)の数
    https://hy38.github.io/counting-the-components-of-graph
  • 図面の接続要素
  • 無方向図は、いくつかの接続されていないセグメントに分裂する.
    ->各接続頂点のサブセット=接続要素=構成部品
  • 図のすべての頂点Vにアクセスするには、DFSをどれだけ呼び出すかを数えるだけでいいです.
    ->シェイプが1つの構成部品で構成されている場合、1つの頂点上のDFSを1回ですべての頂点にアクセスできます.
    ->時間的複雑度O(V+E)