PKU 2377 Bad Cowtractors
http://poj.org/problem?id=2377
N個のノードにm個のコストの設定されたエッジがある。
最大全域木のコストを求めろという問題。ただし、全域木が作れない場合は-1を出力する。
最小全域木のソートを逆にすればおk。
pair<int,PI> edge[20000]; int un[1000]; int find(int x){ if(un[x]==x)return x; else return un[x]=find(un[x]); } void unit(int a,int b){ un[find(a)]=un[find(b)]=find(a); } main(){ int n,m; cin>>n>>m; rep(i,n)un[i]=i; rep(i,m){ int a,b,c; cin>>a>>b>>c; if(a>b)swap(a,b); edge[i]=mp(c,mp(a-1,b-1)); } sort(edge,edge+m,greater<pair<int,PI> >()); int ans=0; rep(i,m){ if(find(edge[i].S.F)==find(edge[i].S.S))continue; ans+=edge[i].F; unit(edge[i].S.F,edge[i].S.S); } rep(i,n-1){ if(find(i+1)==find(0))continue; ans=-1; break; } cout<<ans<<endl; }