๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 3584๋ฒˆ - ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ

by ์•ˆ์ฃผํ˜• 2022. 7. 11.

๋ฌธ์ œ

 

3584๋ฒˆ: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ

๋ฃจํŠธ๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ(rooted tree)๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๊ทธ ํŠธ๋ฆฌ ์ƒ์˜ ๋‘ ์ •์ ์ด ์ฃผ์–ด์งˆ ๋•Œ ๊ทธ๋“ค์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ(Nearest Common Anscestor)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์€, ๋‘

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <memory.h>
using namespace std;


bool visited[10001];

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

	int T; cin >> T;
	while (T--) {
		int N; cin >> N;
		vector<int>graph(N + 1);

		for (int i = 1; i <= N - 1; i++) {
			int a, b; cin >> a >> b;
			graph[b] = a;
		}
		int a, b; cin >> a >> b;
		visited[a] = true;
		while (a != graph[a]) {
			visited[a] = true;
			a = graph[a];
		}

		while (true) {

			if (visited[b] == true) {
				cout << b << '\n';
				break;
			}
			b = graph[b];

		}
		memset(visited, 0, sizeof(visited));
	}
}

 

ํ’€์ด

์œ„์™€ ๊ฐ™์€ ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‘ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 

  1. ๋จผ์ € ์ž…๋ ฅ๋ฐ›์€ ๋…ธ๋“œ๋“ค๋งˆ๋‹ค ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ธฐ์–ตํ•ด์ค๋‹ˆ๋‹ค.
  2. ๋‘ ๋…ธ๋“œ ์ค‘ ํ•œ ๋…ธ๋“œ๋ฅผ ์žก์•„์„œ ํ•ด๋‹น ๋…ธ๋“œ์™€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ „๋ถ€ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‚จ์€ ํ•œ ๋…ธ๋“œ๋ฅผ ์žก์•„์„œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ „๋ถ€ ๋ฐฉ๋ฌธํ•  ๋•Œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋œ ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ ๋…ธ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€