Pagini recente » Cod sursa (job #1505182) | Cod sursa (job #23136) | Cod sursa (job #1256724) | Cod sursa (job #38403) | Cod sursa (job #1350485)
#include <fstream>
#include <vector>
#include <algorithm>
#define NMax 200005
#define MMax 400005
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct Muchie
{
int x,y,c;
};
Muchie V[MMax];
vector < pair<int, int> > Sol;
int N,M,Cost;
int TT[NMax];
bool Compare(Muchie A, Muchie B)
{
return A.c<B.c;
}
void Read()
{
fin>>N>>M;
for(int i=1;i<=M;i++)
{
fin>>V[i].x>>V[i].y>>V[i].c;
}
sort(V+1, V+M+1,Compare);
}
int Father(int x)
{
while(TT[x]!=x)
x=TT[x];
return x;
}
void Unite(int x, int y)
{
TT[x]=y;
}
void Solve()
{
int i,x1,y1;
for(i=1;i<=N;i++)
TT[i]=i;
for(i=1; i<=M; i++)
{
x1=Father(V[i].x);
y1=Father(V[i].y);
if(x1!=y1)
{
Cost += V[i].c;
Unite(x1, y1);
Sol.push_back(make_pair(V[i].y, V[i].x));
}
}
}
void Print()
{
fout<<Cost<<"\n";
fout<<N-1<<"\n";
for(int i=0; i<(int)Sol.size(); i++)
fout<<Sol[i].first<<" "<<Sol[i].second<<"\n";
}
int main()
{
Read();
Solve();
Print();
return 0;
}