Pagini recente » Cod sursa (job #1052688) | Cod sursa (job #80922) | Cod sursa (job #926283) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 155 | Cod sursa (job #1849823)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define dim 400000
using namespace std;
ifstream f ("apm.in");
ofstream g ("apm.out");
struct filip
{
int x,y,cost;
} v[dim];
int l[dim],poz[dim];
vector < int > vec;
bool cmp(int a,int b)
{
return v[a].cost < v[b].cost;
}
int grupa(int x)
{
if(l[x] == x)
return x;
l[x] = grupa(l[x]);
return l[x];
}
void uneste(int x,int y)
{
l[grupa(x)] = grupa(y);
}
int main()
{
int n,m,i,k = 0,ct = 0;
f >> n >> m;
for(i = 1; i <= m; i++)
f >> v[i].x >> v[i].y >> v[i].cost,poz[i] = i;
sort(poz + 1,poz + m + 1,cmp);
for(i = 1;i <= n;i++)
l[i] = i;
for(i = 1; i <= m; i++)
if(grupa(v[poz[i]].x) != grupa(v[poz[i]].y))
{
k++;
ct += v[poz[i]].cost;
vec.push_back(poz[i]);
uneste(v[poz[i]].x,v[poz[i]].y);
}
g << ct << '\n';
g << k << '\n';
for(i = 0; i < vec.size(); i++)
g << v[vec[i]].y << " " << v[vec[i]].x << '\n';
return 0;
}