Pagini recente » Cod sursa (job #793936) | Cod sursa (job #239168) | Cod sursa (job #648316) | Monitorul de evaluare | Cod sursa (job #2807677)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
pair <int, int> P[200001];
int n,m,k,Cost,parent[200001],rnk[200001];
struct Muchie{
int x, y, cost;
}v[200001];
bool comparator(Muchie a,Muchie b){
return a.cost<b.cost;
}
int finder(int nod){
while (parent[nod]!=nod)
nod=parent[nod];
return nod;
}
void Unire(int x, int y){
if(rnk[x]<rnk[y])
parent[x]=y;
if(rnk[x]>rnk[y])
parent[y]=x;
if(rnk[x]==rnk[y]){
parent[x] = y;
rnk[y]++;
}
}
void APM(){
for(int i=1;i<=m;i++){
int parentx=finder(v[i].x),parenty=finder(v[i].y);
if(parentx!=parenty){
Unire(parentx,parenty);
k++;
P[k].first=v[i].x;P[k].second=v[i].y;
Cost+=v[i].cost;
}
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
f>>v[i].x>>v[i].y>>v[i].cost;
sort(v+1,v+m+1,comparator);
for(int i=1;i<=n;i++) {
parent[i]=i;
rnk[i]=0;
}
APM();
g<<Cost<<"\n";
g<<n-1<<"\n";
for(int i=1;i<=k;i++)
g<<P[i].first<<" "<<P[i].second<<"\n";
return 0;
}