Cod sursa(job #2070041)

Utilizator RazvanGutaGuta Razvan Alexandru RazvanGuta Data 19 noiembrie 2017 10:35:16
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
# include <fstream>
# include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct muchie {
    int x, y, c;
}u[200005], sol[200005];
int n, m, k, i, ct, j, nr1, nr2;
int P[200005], T[200005];
bool cmp(muchie x, muchie y )
{
    return x.c < y.c;
}
int Root(int x)
{
    while(T[x] != x)
        x = T[x];
    return x;
}
void Unifica(int x, int y)
{
    if(P[x] < P[y])
        T[x] = y;
    if(P[x] > P[y])
        T[y] = x;
    if(P[x] == P[y]){
        T[y] = x;
        P[x]++;
    }
}
int main()
{
  f>>n>>m;
   for (i=1; i<=m; ++i) {
        f>> u[i].x >>u[i].y >>u[i].c;
        T[i] = i;
    }
   sort(u+1, u+m+1, cmp);
   i = 1;
   while (k < n-1) {
        int rx = Root(u[i].x);
        int ry = Root(u[i].y);
        if (rx != ry){
             ++k;
             ct += u[i].c;
             sol[k] = u[i];
             Unifica(rx, ry);
        }
        ++i;
    }
  g<<ct<<'\n';
  for (i=1; i<=k; ++i)
    g<<sol[i].x<<" "<<sol[i].y<<'\n';

  return 0;
}