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/