문제링크 : https://www.acmicpc.net/problem/14244
14244번: 트리 만들기
n과 m이 주어졌을 때, n개의 노드로 이루어져 있고, m개의 리프로 이루어져 있는 트리를 만드는 프로그램을 작성하시오. 항상 정답이 존재하는 경우만 입력으로 주어진다. 트리는 사이클이 없는
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, M;
cin >> N >> M;
for(int i=0; i<N-M; i++) //일직선
{
cout << i<< " " << i+1 << "\n";
}
for(int i=N-M; i<N-1; i++)
{
cout << N-M << " " <<i+1 <<"\n";
}
return 0;
}
N-M까지는 일직선으로 쭉 그어준다.
트리가 일직선인 경우에는 리프노드가 2개이다 (맨앞, 맨뒤)
현재 N-M이 끝 점이므로, 여기서 부터 간선을 추가하여 리프노드를 만들어준다.
맨 위에 리프노드 1개를 제외한 나머지 리프노드를 트리의 맨 밑바닥에 전부 만드는 형태이다.
'백준 > 실버' 카테고리의 다른 글
[백준 12993번] 이동3 (C++) (0) | 2023.06.09 |
---|---|
[백준 25947번] 선물할인 (C++) (0) | 2023.06.09 |
[백준 11292번] 키 큰 사람 (C++) (0) | 2023.06.04 |
[백준 14715번] 전생했더니 슬라임 연구자였던 건에 대하여 (easy) (C++) (0) | 2023.06.02 |
[백준 14562번] 태권왕 (C++) (0) | 2023.05.31 |