寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #GRL_2_A : Minimum Spanning Tree

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Minimum Spanning Tree"
https://onlinejudge.u-aizu.ac.jp/problems/GRL_2_A
最小全域木

僕が作成、提出したコードは、以下のとおりです。

Aizu Online Judge in C++ #GRL_2_A : Minimum Spanning Tree
/*
Aizu Online Judge in C++ #GRL_2_A : Minimum Spanning Tree
https://onlinejudge.u-aizu.ac.jp/problems/GRL_2_A
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int v,e;
set<pair<int,pair<int,int>>> g;
int a[10005];
void inp(void){
    for(int i=0;i<10005;i++){
        a[i]=i;
    }
}
int find(int x){
    if(a[x]==x){
        return x;
    }else{
        return (a[x]=find(a[x]));
    }
}
void f(int x,int y){
    a[find(x)]=y;
}
int main(void){
    long long ans=0;
    inp();
    cin>>v>>e;
    for(int i=0;i<e;i++){
        int a,b,l;
        cin>>a>>b>>l;
        g.insert({l,{a,b}});
    }
    for(auto p : g){
        if(find(p.second.first)!=find(p.second.second)){
            ans+=p.first;
            f(p.second.first,p.second.second);
        }
    }
    cout<<ans<<endl;
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/