๐Ÿ‘Š PS/Algorithm

[Baekjoon] 1167๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

hades1 2024. 8. 2. 21:48

๐Ÿฅ… ๋ฌธ์ œ

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

 

๐Ÿ” ์„ค๊ณ„

๊ฐ€์ง€๊ฐ€ 1์ธ ๋…ธ๋“œ๋“ค์—์„œ dfs๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๋„์ €ํžˆ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋ ˆํผ๋Ÿฐ์Šค ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

 

์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ๊ตฌํ•˜๊ณ , ๊ทธ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ๊ตฌํ•˜๋ฉด, ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ๊ณต๋ถ€ํ•ด๋ณธ๋‹ค.

 

์ž„์˜์˜ ๋…ธ๋“œ๋ฅผ x๋ผ๊ณ  ํ•˜๊ณ , x์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ y๋ผ๊ณ  ํ•˜๋ฉด, 3๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

1) x๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์˜ ์–‘ ๋ ์  ์ค‘ ํ•˜๋‚˜๋ผ๋ฉด, x์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ์ธ y๊ฐ€ ๋‚˜๋จธ์ง€ ๋ ์  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜๋ฏ€๋กœ y์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ(x)๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋Š” ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์ด ๋œ๋‹ค.

2) y๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์˜ ์–‘ ๋ ์  ์ค‘ ํ•˜๋‚˜๋ผ๋ฉด, ๋‹น์—ฐํ•˜๊ฒŒ y์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์ด ๋œ๋‹ค.

3) y๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„๊ณผ ์ƒ๊ด€์—†๊ณ , ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์€ u-v์ด๊ณ , x-y์™€ u-v๊ฐ€ ๊ต์ฐจ์  t๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•˜์ž. x์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๊ฐ€ y๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๋Š” ๋ชจ์ˆœ์ด๋‹ค. x์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋Š” ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” x-t-u ๋˜๋Š” x-t-v๊ฐ€ ๋˜์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. y๊ฐ€ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ผ๋ฉด, ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์€ u-t-y ๋˜๋Š” v-t-y๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, y๋Š” ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„๊ณผ ์ƒ๊ด€์—†๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์œผ๋ฏ€๋กœ ๋ชจ์ˆœ์ด๋‹ค.

์œ„ ์กฐ๊ฑด์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋งŒ์•ฝ ๊ต์ฐจ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ, ๊ทธ๊ฑด ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ๊ฒฐ๋ก ์€ y๋Š” ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ์ด๋ฃจ๋Š” ์–‘ ๋ ์  ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

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

int v, start, endd, cost, max_node, result = 0;
vector<vector<pair<int, int>>> adj_list(100001);
vector<bool> visited(100001,false);

void dfs(int cur_node, int cur_cost) {
	if (result < cur_cost) {
		result = cur_cost;
		max_node = cur_node;
	}

	for (int i = 0; i < adj_list[cur_node].size(); i++) {
		int next_node = adj_list[cur_node][i].first;
		int next_cost = adj_list[cur_node][i].second;
		if (!visited[next_node]) {
			visited[next_node] = true;
			dfs(next_node, cur_cost + next_cost);
			visited[next_node] = false;
		}
	}
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> v;
	for (int i = 0; i < v; i++) {
		cin >> start;
		while (true) {
			cin >> endd;
			if (endd == -1) {
				break;
			}
			cin >> cost;
			adj_list[start].push_back({ endd, cost });
		}
	}

	visited[1] = true;
	dfs(1, 0);
	visited[1] = false;

	visited[max_node] = true;
	dfs(max_node, 0);
	visited[max_node] = false;
	
	cout << result << "\n";

	return 0;
}

 

๐Ÿ“– ๋ ˆํผ๋Ÿฐ์Šค

https://blog.myungwoo.kr/112

 

ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ๊ตฌํ•˜๊ธฐ

ํŠธ๋ฆฌ์—์„œ ์ง€๋ฆ„์ด๋ž€, ๊ฐ€์žฅ ๋จผ ๋‘ ์ •์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ ํ˜น์€ ๊ฐ€์žฅ ๋จผ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์„ ํ˜• ์‹œ๊ฐ„์•ˆ์— ํŠธ๋ฆฌ์—์„œ ์ง€๋ฆ„์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: 1. ํŠธ๋ฆฌ์—์„œ ์ž„์˜์˜ ์ •์  $x$๋ฅผ

blog.myungwoo.kr

 

https://blogshine.tistory.com/111

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ : Diameter of Tree

ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ์ด๋ž€? " data-ke-type="html"> HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์€ ๋‘๊ฐœ์˜ ๋ง๋‹จ๋…ธ๋“œ๊ฐ„์˜ ์ตœ์žฅ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์ •์ ์„ u, v ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ด๋“ค๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋Š” d(u, v) ๋ผ๊ณ  ํ•จ

blogshine.tistory.com