본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 2463 비용

by 까망 하르방 2021. 4. 3.
반응형

출처https://www.acmicpc.net/problem/2463

Approach

Disjoint-Set & Union-Find  

 

Disjoint-Set & Union-Find

Disjoint-Set, 상호 배타적 집합 서로 중복되지 않는 부분 집합들을 의미 (교집합 존재 X) Union-Find Disjoint-Set을 표현할 때 사용하는 알고리즘. ex) 여러 노드가 존재할 때, 두 개의 노드를 선택해서 두

zoosso.tistory.com


#include <stdio.h>
typedef long long LL;
const int MOD = (int)1e9;
const int LM = 100005;
int N, M;
int group[LM];
int urr[LM], vrr[LM];
LL sum, ans, cnt[LM];

int find(int k) {
    if (group[k] == k) return k;
    return group[k] = find(group[k]);
}

int main() {
    // freopen("input.txt", "r", stdin);

    scanf("%d %d", &N, &M);
    int i, u, v, w;
    for (i = 1; i <= N; ++i) {
        group[i] = i;
        cnt[i] = 1;
    }
    for (i = 0; i < M; ++i) {
        scanf("%d %d %d", &u, &v, &w);
        urr[w] = u, vrr[w] = v;
        sum += w;
    }
    sum %= MOD;

    for (i = LM - 5; i > 0; --i) {
        if (urr[i]) {
            u = find(urr[i]), v = find(vrr[i]);
            if (u != v) {
                ans = (ans + sum * cnt[u] * cnt[v]) % MOD;
                group[v] = u;
                cnt[u] += cnt[v];
            }
            sum = (sum - i + MOD) % MOD;
        }
    }

    printf("%lld\n", ans);
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 2438 별 찍기 - 1  (0) 2021.04.17
[BOJ] 백준 2660 회장뽑기  (0) 2021.04.03
[BOJ] 백준 2529 부등호  (0) 2021.04.01
[BOJ] 백준 2665 미로만들기  (0) 2021.03.31
[BOJ] 백준 14867 물통  (0) 2021.03.30

댓글