※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5938번 문제인 Daisy Chains in the Field이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/5938 

 

5938번: Daisy Chains in the Field

Farmer John let his N (1 <= N <= 250) cows conveniently numbered 1..N play in the field. The cows decided to connect with each other using cow-ropes, creating M (1 <= M <= N*(N-1)/2) pairwise connections. Of course, no two cows had more than one rope direc

www.acmicpc.net

주어지는 소와 줄을 각각 노드와 에지로 생각해 그래프로 모델링하면 주어진 문제는 1번 소가 포함된 connected component에 속하지 않은 소의 번호들을 출력(그러한 소가 없다면 0을 출력)하는 문제로 바꿔 생각할 수 있다.

 

DFS, BFS등의 그래프 탐색 알고리즘을 이용해 문제를 해결해주자.

 

번외로, 소의 마릿수가 충분히 적으므로 더이상의 새로운 연결을 찾을 수 없을 때까지 반복문을 돌면서 기존에 연결된 소와 새로이 연결되는 소가 있는지를 판단하는 O(N^3) 알고리즘 또한 충분히 좋은 해법이 될 것이다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
using namespace std;

int N, M;
vector<int> G[251];
bool visited[251];

void dfs(int cur) {
	visited[cur] = 1;
	for (auto& node : G[cur]) {
		if (!visited[node]) dfs(node);
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> M;
	while (M--) {
		int x, y; cin >> x >> y;
		G[x].emplace_back(y);
		G[y].emplace_back(x);
	}

	dfs(1);

	bool chk = 0;
	for (int i = 1; i <= N; i++) {
		if (!visited[i]) cout << i << '\n', chk = 1;
	}

	if (!chk) cout << 0;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 5939 // C++] Race Results  (0) 2023.01.04
[BOJ 27101 // C++] Metric Matrices  (0) 2023.01.04
[BOJ 27106 // C++] Making Change  (0) 2023.01.03
[BOJ 17141 // C++] 연구소 2  (0) 2023.01.03
[BOJ 24198 // C++] Muffinspelet  (0) 2023.01.02

+ Recent posts