Pagini recente » Cod sursa (job #501301) | Cod sursa (job #1309103) | Cod sursa (job #655139) | Cod sursa (job #1671995) | Cod sursa (job #2722851)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
#define nrm 400005
#define nrn 200005
int n,m;
int tt[nrn],rg[nrn];
pair<int,int>rez[nrm];
int p=0,suma=0;
struct muchie
{
int x,y,cost;
}v[nrm];
bool compare(muchie a, muchie b)
{
if(a.cost<b.cost)
{
return true;
}
return false;
}
void citire()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>v[i].x>>v[i].y>>v[i].cost;
}
sort(v+1,v+m+1,compare);
}
int tata(int nod)
{
while(tt[nod]!=nod)
{
nod=tt[nod];
}
return nod;
}
void unire(int x,int y)
{
if(rg[x]>rg[y])
{
tt[y]=x;
}
if(rg[y]>rg[x])
{
tt[x]=y;
}
if(rg[y]==rg[x])
{
tt[x]=y;
rg[y]++;
}
}
void rezolvare()
{
for(int i=1;i<=m;i++)
{
int t1=tata(v[i].x);
int t2=tata(v[i].y);
if(t1!=t2)
{
unire(t1,t2);
p++;
rez[p].first=v[i].x;
rez[p].second=v[i].y;
suma=suma+v[i].cost;
}
}
}
void afisare()
{
fout<<suma<<'\n'<<p<<'\n';
for(int i=1;i<=p;i++)
{
fout<<rez[i].first<<" "<<rez[i].second<<'\n';
}
}
int main ()
{
citire();
for(int i=1;i<=n;i++)
{
tt[i]=i;
rg[i]=1;
}
rezolvare();
afisare();
fin.close();
fout.close();
return 0;
}