문제링크 : https://www.acmicpc.net/problem/9372
9372번: 상근이의 여행
첫 번째 줄에는 테스트 케이스의 수 T(T ≤ 100)가 주어지고, 각 테스트 케이스마다 다음과 같은 정보가 주어진다. 첫 번째 줄에는 국가의 수 N(2 ≤ N ≤ 1 000)과 비행기의 종류 M(1 ≤ M ≤ 10 000) 가
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int T, N, M;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while(T--)
{
cin >> N >> M;
for(int i=0; i<M; i++)
{
int a, b;
cin >> a >> b;
}
cout << N-1 << "\n"; //ST 간선의 수
}
}
알고나면 상당히 허무한 문제이다.
문제에서 모든 국가들을 여행할 때 가장 적은 종류의 비행기를 구하도록하였다.
그리고 주어지는 비행 수케줄은 항상 연결 그래프를 이룬다고 명시되어있다.
결국 어느 노드를 고르든 몇 번의 이동을 거쳐서 다른 노드로의 이동이 가능하다.
이러한 형태의 최소 이동 횟수는 일직선과 같이 한번에 쭉 이동이 가능한 N-1개이다.
문제에서 모든 국가들이 정점의 수이고, 비행기의 종류가 간선이다.
따라서 a, b의 내용과는 관계없이 가장 적은 종류의 비행기를 나타내는 가장 적은 간선의 수는 항상 N-1개가 된다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
그래프 내의 모든 정점을 연결하고(항상 연결 그래프),
간선의 수가 가장 적은(가장 적은 종류의 비행기) 최소 연결 부분 그래프를 찾으므로 스패닝 트리 문제이다.
스패닝 트리의 간선의 수는 N-1이므로 마찬가지로 답은 N-1개를 출력해주면 된다.
'백준 > 실버' 카테고리의 다른 글
[백준 13116번] 30번 (C++) (0) | 2023.11.01 |
---|---|
[백준 25511번] 값이 k인 트리 노드의 깊이 (C++) (0) | 2023.10.28 |
[백준 1309번] 동물원 (C++) (0) | 2023.10.20 |
[백준 11057번] 오르막 수 (C++) (0) | 2023.10.13 |
[백준 15235번] Olympiad Pizza (C++) (0) | 2023.10.08 |