Pagini recente » Cod sursa (job #749677) | Cod sursa (job #866978) | Cod sursa (job #534593) | Cod sursa (job #941909) | Cod sursa (job #1547319)
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
ifstream fin("apm.in");
ofstream fout("apm.out");
const int NMAX = 200005;
struct Speranta{
int cost,x,y;
}v[NMAX * 2];
vector < int > sol;
int G[NMAX];
bool cmp(const Speranta A , const Speranta B){
return (A.cost < B.cost);
}
int Grup(int nod){
if(nod == G[nod])
return nod;
G[nod] = Grup(G[nod]);
return G[nod];
}
void reuniunion(int x, int y){
G[Grup(y)] = Grup(x);
}
int main()
{
int n,m,x,y,c;
fin >> n >> m;
for(int i = 1; i <= m; i++){
fin >> v[i].x >> v[i].y >> v[i].cost;
}
sort(v + 1,v + m + 1,cmp);
c = 0;
for(int i = 1; i <= n;i++)
G[i] = i;
for(int i = 1; i <= m;i++){
if(Grup(v[i].x) != Grup(v[i].y)){
c += v[i].cost;
reuniunion(v[i].x,v[i].y);
sol.push_back(i);
}
}
fout << c << "\n" << n - 1;
for(int i = 0; i < sol.size();i++)
fout << "\n" << v[sol[i]].x << " " << v[sol[i]].y;
return 0;
}