Pagini recente » Cod sursa (job #793097) | Cod sursa (job #856029) | Cod sursa (job #2652163) | Cod sursa (job #1403038) | Cod sursa (job #1515111)
#include <fstream>
#include <algorithm>
#include <vector>
#define nMax 200005
#define mMax 400005
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int Rad[nMax], n, m, Rez, i, value1, value2, h, Ans[nMax];
int getRoot(int node)
{
return (Rad[node]<0) ? node : getRoot(Rad[node]);
}
struct muchii
{
int node1;
int node2;
int cost;
}Edges[mMax];
int cmp(muchii o, muchii p)
{
return o.cost<p.cost;
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++)
fin>>Edges[i].node1>>Edges[i].node2>>Edges[i].cost;
sort(Edges+1, Edges+m+1, cmp);
for(i=1;i<=n;i++)
Rad[i]=-1;
for(i=1;i<=m;i++)
{
value1=getRoot(Edges[i].node1);
value2=getRoot(Edges[i].node2);
if(value1!=value2)
{
Rez+=Edges[i].cost;
Ans[++h]=i;
if(Rad[value1]>Rad[value2])
{
Rad[value1]+=Rad[value2];
Rad[value2]=value1;
}
else
{
Rad[value2]+=Rad[value1];
Rad[value1]=value2;
}
}
}
fout<<Rez<<'\n'<<n-1<<'\n';
for(i=1;i<=n-1;i++)
fout<<Edges[Ans[i]].node1<<" "<<Edges[Ans[i]].node2<<'\n';
return 0;
}