Pagini recente » Cod sursa (job #612637) | Cod sursa (job #2218772) | Rating asfoi sdasd (10110) | Cod sursa (job #595991) | Cod sursa (job #2871017)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
const int Max= 400005;
int k;
int N,M,Total,TT[Max],Rg[Max];
struct Muchie
{
int x,y,cost;
}V[Max];
pair<int,int> P[Max];
bool Compar(Muchie a , Muchie b)
{
return a.cost < b.cost;
}
void Read()
{
in>>N>>M;
for(int i=1;i<=M;i++)
in>>V[i].x>>V[i].y>>V[i].cost;
sort(V+1,V+1+M,Compar);
for(int i=1;i<=N;i++)
{
TT[i]=i;
Rg[i]=1;
}
}
int Find(int Nod)
{
while(TT[Nod]!=Nod)
Nod=TT[Nod];
return Nod;
}
int Unire(int x,int y)
{
if(Rg[x]<Rg[y])
TT[x]=y;
if(Rg[x]>Rg[y])
TT[y]=x;
if(Rg[x]==Rg[y])
{
TT[x]=y;
Rg[y]++;
}
}
void Rezolvare()
{
for(int i=1;i<=M;i++)
{
int tatal_x=Find(V[i].x);
int tatal_y=Find(V[i].y);
if(tatal_x!=tatal_y)
{
Unire(tatal_x,tatal_y);
P[++k].first=V[i].x;
P[k].second=V[i].y;
Total+= V[i].cost;
}
}
}
void afisare()
{
out<<Total<<"\n";
out<<N-1<<"\n";
for(int i=1;i<=k;i++)
out<<P[i].second<<" "<<P[i].first<<"\n";
}
int main()
{
Read();
Rezolvare();
afisare();
}