티스토리 뷰

반응형

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

 

1922번: 네트워크 연결

이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.

www.acmicpc.net

 

  • 필요한 배경지식

최소 신장 트리(Minimum Spanning Tree) : 크루스칼(Kruskal) 알고리즘

 

 

 

  • 문제 해결 방법

단순 MST문제입니다.

유니온 파인드를 활용한 크루스칼 알고리즘을 이용했습니다.

 

 

 

 

  • C++ 전체 코드
#include<bits/stdc++.h>
using namespace std;
using tpi = tuple<int,int,int>;

int N,M;
vector<tpi> edge;
int par[1001]{};


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

void merge(int a, int b){
    a = find(a);
    b = find(b);
    par[a] = b;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>N;
    for(int i=0; i<=N; i++) par[i] = i;
    cin>>M;
    int a,b,c;
    for(int i=0; i<M; i++){
        cin>>a>>b>>c;
        edge.push_back({c,a,b});
    }
    sort(edge.begin(), edge.end());

    int ans = 0;
    for(auto e : edge){
        int a,b,c;
        tie(a,b,c) = e;
        if(find(b) == find(c)) continue;
        merge(b,c);
        ans += a;
    }

    cout<<ans;
}

 

반응형

'알고리즘 공부 > 문제풀이' 카테고리의 다른 글

백준 11960번 - Max Flow  (0) 2021.05.28
백준 5916번 - 농장 관리  (3) 2021.05.28
백준 10986번 - 나머지 합  (0) 2021.05.25
백준 14267번 - 회사 문화 1  (1) 2021.05.25
백준 17780번 - 새로운 게임  (0) 2021.05.24
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함