PKU 2421 Constructing Roads
http://poj.org/problem?id=2421
n個の村があって、村iから村jまでの道の建設にはcijのコストがかかる。
いますでにm個の道が作られている時、村全体を行き来できるように道路を建設する最小のコストはいくらかを求める問題。
int un[100]; int find(int x){ if(un[x]==x)return x; return un[x]=find(un[x]); } int unit(int a,int b){ un[find(a)]=un[find(b)]=find(a); } main(){ int n; cin>>n; priority_queue<pair<int,PI> > Q; rep(i,n){ un[i]=i; rep(j,n){ int c; cin>>c; Q.push(mp(-c,mp(i,j))); } } int m; cin>>m; rep(i,m){ int a,b; cin>>a>>b; unit(a-1,b-1); } int ans=0; while(!Q.empty()){ int c=-Q.top().F,a=Q.top().S.F,b=Q.top().S.S; Q.pop(); if(find(a)==find(b))continue; ans+=c; unit(a,b); } cout<<ans<<endl; }