Processing math: 100%

알고리즘

[BOJ 27966] △

dldyou 2024. 3. 25. 21:23

모든 정점 쌍에 대해 두 정점 사이의 거리의 합을 최소화하는 문제이다. 머릿속으로 모양 몇 개를 떠올리면 금방 풀 수 있는 문제이다. 하나의 정점 아래에 다른 모든 정점을 연결하면 된다. 

 

이렇게 한다면 최솟값은 루트 정점에서 다른 정점들 사이의 거리의 합인 1×N1과 다른 모든 정점 쌍들 사이의 거리의 합인 2× NC2를 더한 값이 된다. int 범위를 벗어남을 유의하자.

long long N;
int main(void) {
    fastio;
    cin >> N;
    cout << N - 1 + (N - 1) * (N - 2) << "\n";
    for (int i = 2; i <= N; i++) {
        cout << 1 << " " << i << "\n";
    }
    return 0;
}

'알고리즘' 카테고리의 다른 글

[BOJ 17215] 볼링 점수 계산  (0) 2024.03.26
[BOJ 2806] DNA 발견  (0) 2024.03.25
[BOJ 26008] 해시 해킹  (1) 2024.03.24
[BOJ 11899] 괄호 끼워넣기  (1) 2024.03.22
[BOJ 2036] 수열의 점수  (0) 2024.03.19