Pagini recente » Cod sursa (job #188311) | Cod sursa (job #331534) | Cod sursa (job #2545019) | Cod sursa (job #3263658) | Cod sursa (job #1607496)
#include <fstream>
#include <algorithm>
#define mmax 400005
#define nmax 200005
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct el
{
int c,x,y;
};
el v[mmax],rez[nmax];
int n,m,cost,tata[nmax],ad[nmax];
bool mod(el x,el y)
{
if(x.c<y.c)
return 1;
return 0;
}
void citire()
{
int i;
fin>>n>>m;
for(i=1;i<=m;i++)
fin>>v[i].x>>v[i].y>>v[i].c;
sort(v+1,v+m+1,mod);
}
int gasire(int x)
{
while(tata[x]!=0)
x=tata[x];
return x;
}
int legat(int x,int y)
{
x=gasire(x);
y=gasire(y);
if(x==y)
return 1;
return 0;
}
void unire(int x,int y)
{
x=gasire(x);
y=gasire(y);
if(ad[x]>ad[y])
tata[y]=x;
else
{
if(ad[x]<ad[y])
tata[x]=y;
else
{
tata[x]=y;
ad[y]++;
}
}
}
void rezolvare()
{
int i,j=0;
for(i=1;i<=m;i++)
{
if(legat(v[i].x,v[i].y)==0)
{
unire(v[i].x,v[i].y);
rez[++j]=v[i];
cost=cost+v[i].c;
}
if(j==n-1)
break;
}
}
void afisare()
{
int i;
fout<<cost<<'\n'<<n-1<<'\n';
for(i=1;i<n;i++)
fout<<rez[i].x<<' '<<rez[i].y<<'\n';
}
int main()
{
citire();
rezolvare();
afisare();
fout.close();
return 0;
}