[BOJ] 1197번: 최소 스패닝 트리
문제 링크:
https://www.acmicpc.net/problem/1197
접근법:
문제 제목 그대로 최소 스패닝 트리 문제이다.
따로 훼이크도 없고 그냥 문제에 나와있는 조건 그대로 구현하면 끝.
코드:
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef long long ll;
typedef pair<int, int> P;
typedef pair<int, pair<int, int>> P2;
int V, E, a, b, c, p[10001], r[10001], ans;
vector<P2> adj;
int find(int u){
    if(p[u] == u) return u;
    return p[u] = find(p[u]);
}
bool merge(int u, int v){
    u = find(u), v = find(v);
    if(r[u] < r[v])
        swap(u, v);
    if(u == v) return false;
    p[v] = u;
    if(r[u] == r[v])
        r[u]++;
    return true;
}
int main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> V >> E;
    adj = vector<P2>(V);
    for(int i = 0; i < E; i++){
        cin >> a >> b >> c;
        a--, b--;
        adj.push_back(P2(c, P(a, b)));
    }
    for(int i = 0; i < V; i++)
        p[i] = i;
    sort(adj.begin(), adj.end());
    for(int i = 0; i < adj.size(); i++){
        int cost = adj[i].first;
        int u = adj[i].second.first;
        int v = adj[i].second.second;
        if(merge(u, v))
            ans += cost;
    }
    cout << ans;
}Author And Source
이 문제에 관하여([BOJ] 1197번: 최소 스패닝 트리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lolmc/BOJ-1197번-최소-스패닝-트리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)