Pagini recente » Cod sursa (job #218621) | Cod sursa (job #1776560) | Cod sursa (job #3151753) | Cod sursa (job #674295) | Cod sursa (job #1344703)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#define nmax 200005
#include <algorithm>
using namespace std;
pair <int,pair<int,int> >p[2*nmax];
vector<pair<int,int> >v;
int n,m,t[nmax],s;
ifstream fin("apm.in");
ofstream fout("apm.out");
void citire()
{
int x,y,c;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>c;
p[i]=make_pair(c,make_pair(x,y));
}
for(int i=1;i<=n;i++)
t[i]=i;
}
void grupare(int x,int y)
{
t[t[x]]=t[y];
v.push_back(make_pair(x,y));
}
int tata(int k)
{
if(t[k]==k)
return k;
t[k]=tata(t[k]);
return t[k];
}
void kruskal()
{
int x,y,k;
for(int i=1;i<=m;i++)
{
x=p[i].second.first;
y=p[i].second.second;
k=p[i].first;
if(tata(x)!=tata(y))
grupare(x,y),s+=k;
}
}
void afisare()
{
fout<<s<<"\n"<<v.size()<<"\n";
for(vector<pair<int,int> >::iterator ii=v.begin();ii!=v.end();++ii)
fout<<ii->first<<" "<<ii->second<<"\n";
}
int main()
{
citire();
sort(p+1,p+m+1);
kruskal();
afisare();
return 0;
}