트리의 지름

eunsukim·2025년 3월 22일
0

알고리즘

  1. 트리에서 임의의 정점 rr 를 선택한다.
  2. 정점 rr 에서 가장 멀리 떨어진 정점 xx 를 선택한다.
  3. 정점 xx 에서 가장 멀리 떨어진 정점 yy 를 선택한다.
  4. Dist(x,y)Dist(x,y) 는 트리의 지름이다.

증명

트리에서 정점 uuvv 를 잇는 경로 Dist(u,v)Dist(u,v) 를 실제 트리의 지름이라고 할 때,

1. xxuu 또는 vv 인 경우

2. yyuu 또는 vv 인 경우

3. xx, yy, uu, vv 가 모두 서로 다른 경우

1번과 2번 케이스는 xx 또는 yyuu 또는 vv 이므로 자연히 남은 한 점도 uu 또는 vv 이다.
Dist(x,y)==Dist(u,v)Dist(x,y) == Dist(u,v)이다.

3번 케이스는 두가지 하위 케이스를 가진다.

3.1. Dist(x,y)Dist(x,y)Dist(u,v)Dist(u,v) 경로가 한 점 이상 공유하는 경우

3.2. Dist(x,y)Dist(x,y)Dist(u,v)Dist(u,v) 경로가 아무 점도 공유하지 않는 경우

3.1 케이스

Dist(x,y),Dist(u,v)Dist(x,y), Dist(u,v)tt 라는 정점을 공유한다고 하자. 트리의 실제 지름이 Dist(u,v)Dist(u,v) 인 상황에서 Dist(u,v)Dist(u,v)tt 라는 정점을 지나는 경로일 것이다.

즉, tt 정점에서 가장 멀리 떨어진 점이 vv 이다.
만약 tt 정점에서 가장 멀리 떨어진 정점이 yy 라면 트리의 실제 지름은 Dist(u,y)Dist(u,y) 가 되므로 모순이 발생한다. 그러므로 xx 에서 가장 멀리 떨어진 정점인 yytt 를 기준으로 가장 멀리 떨어진 {uu,vv} 가 될 수 밖에 없다. 이에 따라 xx 도 정해진다.

3.2 케이스

Dist(x,y),Dist(u,v)Dist(x,y), Dist(u,v) 가 어떠한 점도 공유하지 않는 경우라도, 트리는 연결 그래프이므로 두 경로를 잇는 경로는 무조건 존재한다.

xx 에서 가장 멀리 떨어진 정점이 yy 이므로 Dist(a,y)>Dist(a,b,v)Dist(a,y) > Dist(a,b,v) 이다.
uu 에서 가장 멀리 떨어진 정점이 vv 이므로 Dist(b,v)>Dist(b,a,y)Dist(b,v) > Dist(b,a,y) 이다.

두 식을 엮으면,

Dist(a,y)>Dist(a,b,v)>Dist(b,a,y)Dist(a,y) > Dist(a,b,v) > Dist(b,a,y)
Dist(a,y)>Dist(b,a,y)Dist(a,y) > Dist(b,a,y) 는 모순이다. 즉, 3.2 케이스는 불가능하다.

위 케이스들을 통해서 임의의 정점 xx 를 잡고, 그로부터 가장 멀리 떨어진 정점 yy 를 선택하였을 때, Dist(x,y)Dist(x,y) 는 결국 트리의 지름이 된다.

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

0개의 댓글