Pagini recente » Cod sursa (job #1737086) | Cod sursa (job #1875002) | Cod sursa (job #929611) | Cod sursa (job #1928134) | Cod sursa (job #1299653)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 200005
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
pair<int,pair<int,int> >g[2*nmax];
int n,m,cost,t[nmax];
vector<pair<int,int> >v;
void citire()
{
int x,y,c;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>c;
g[i]=make_pair(c,make_pair(x,y));
}
for(int i=1;i<=n;i++)
t[i]=i;
}
int tata(int k)
{
if(t[k]==k)
return k;
t[k]=tata(t[k]);
return t[k];
}
void adaug(int a,int b)
{
t[t[a]]=t[b];
v.push_back(make_pair(a,b));
}
void kruskal()
{
int a,b;
for(int i=1;i<=m;i++)
{
a=g[i].second.first;
b=g[i].second.second;
if(tata(a)==tata(b))
continue;
adaug(a,b);
cost+=g[i].first;
}
}
void afisare()
{
int nr=v.size();
fout<<cost<<"\n"<<nr<<"\n";
for(vector<pair<int,int> >::iterator ii=v.begin();ii!=v.end();++ii)
fout<<ii->first<<" "<<ii->second<<"\n";
}
int main()
{
citire();
sort(g+1,g+m+1);
kruskal();
afisare();
return 0;
}