Pagini recente » Cod sursa (job #1477557) | Cod sursa (job #1040612) | Cod sursa (job #1066474) | Cod sursa (job #454057) | Cod sursa (job #1770708)
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#define MAX 400005
using namespace std;
int n, m, t[MAX], suma;
vector <pair<int,pair<int, int> > > g;
vector <pair<int, int> >rasp;
vector <pair<int,pair<int, int> > >::iterator it;
vector <pair<int, int> >::iterator it1;
void citire()
{
scanf("%d %d", &n, &m);
int x, y, c;
for(int i=1; i<=m; ++i)
{
scanf("%d %d %d", &x, &y, &c);
g.push_back(make_pair(c, make_pair(x, y)));
}
sort(g.begin(), g.end());
for(int i=1; i<=n; ++i)
t[i]=i;
}
int radacina(int x)
{
while(x!=t[x])
{
x=t[x];
}
return x;
}
int verificareMultime(int x, int y)
{
if(radacina(x)==radacina(y))
return 0;
return 1;
}
void inserare(int x, int y)
{
t[radacina(x)]=radacina(y);
rasp.push_back(make_pair(x, y));
}
void rezolvare()
{
int nr=1;
for(it=g.begin(); it!=g.end() && nr<=n-1; ++it)
{
if(verificareMultime(it->second.first, it->second.second))
{
inserare(it->second.first, it->second.second);
suma+=it->first;
nr++;
}
}
}
void afisare()
{
printf("%d\n%d\n", suma, n-1);
for(it1=rasp.begin(); it1!=rasp.end(); ++it1)
printf("%d %d\n", it1->first, it1->second);
}
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
citire();
rezolvare();
afisare();
return 0;
}