Pagini recente » Istoria paginii blog/biografii-olimpici | Cod sursa (job #527809) | Cod sursa (job #1425418) | Cod sursa (job #1313259) | Cod sursa (job #2830147)
#include <fstream>
#include <vector>
#include <algorithm>
#define NMAX 200003
using namespace std;
int tati[NMAX+3],n,m;
int cost=0;
//bool viz[400003];
struct val{
int x,y,cost;
};
vector<val> muchii;
ifstream fin ("apm.in");
ofstream fout ("apm.out");
int cmp(val a,val b)
{
return a.cost<b.cost;
}
int cRad(int nr)
{
int k=nr;
while(tati[k]>0)
{
k=tati[k];
}
return k;
}
int main()
{
fin>>n>>m;
for(int i=1; i<=m; i++)
{
int x,y,cost;
fin>>x>>y>>cost;
muchii.push_back({x,y,cost});
}
stable_sort(muchii.begin(),muchii.end(),cmp);
int nrm=0;
vector< pair<int,int> >sol;
for(int i=0; i<muchii.size(); i++)
{
int rad1=cRad(muchii[i].x);
int rad2=cRad(muchii[i].y);
if(rad1!=rad2)
{
cost+=muchii[i].cost;
sol.push_back({muchii[i].y,muchii[i].x});
nrm++;
if(tati[rad1]<=tati[rad2])
{
tati[rad1]+=tati[rad2];
tati[rad2]=rad1;
}
else{
tati[rad2]+=tati[rad1];
tati[rad1]=rad2;
}
}
}
fout<<cost<<"\n"<<nrm<<"\n";
for(int i=0; i<sol.size(); i++)
{
fout<<sol[i].first<<" "<<sol[i].second<<"\n";
}
return 0;
}