[規格]1724接続要素の数
バックエンド11724接続要素数
https://www.acmicpc.net/problem/11724
グラフィックのすべての頂点にアクセスするには、DFSが何回呼び出されるかを数えるだけです.
白駿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)
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
->各接続頂点のサブセット=接続要素=構成部品
->シェイプが1つの構成部品で構成されている場合、1つの頂点上のDFSを1回ですべての頂点にアクセスできます.
->時間的複雑度O(V+E)
Reference
この問題について([規格]1724接続要素の数), 我々は、より多くの情報をここで見つけました https://velog.io/@sunjoo9912/백준-11724-연결-요소의-개수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol