Pagini recente » Cod sursa (job #488222) | Cod sursa (job #2738986) | Cod sursa (job #1465880) | Cod sursa (job #480968) | Cod sursa (job #1829090)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define dim 200001
using namespace std;
ifstream f ("kruskal.in");
ofstream g ("kruskal.out");
struct filip
{
int x,y,c;
}v[400001];
int n,m,i,poz[dim],k,ix,iy,cost,j;
vector < pair < int,int > > vec;
bool cmp(filip a,filip b)
{
return a.c < b.c;
}
int grupa(int x)
{
if(poz[x] == x)
return x;
return grupa(poz[x]);
}
void cauta(int x,int y)
{
poz[grupa(x)] = grupa(y);
}
int main()
{
f >> n >> m;
for(i = 1;i <= m;i++)
f >> v[i].x >> v[i].y >> v[i].c,poz[i] = i;
sort(v + 1,v + m + 1,cmp);
for(i = 1;k < n - 1;i++)
{
ix = poz[v[i].x];
iy = poz[v[i].y];
if(grupa(ix) != grupa(iy))
{
k++;
cost += v[i].c;
vec.push_back(make_pair(v[i].x,v[i].y));
cauta(v[i].x,v[i].y);
}
}
g << cost << '\n' << k << '\n';
for(i = 0;i < k;i++)
g << vec[i].first << " " << vec[i].second << '\n';
return 0;
}