Cod sursa(job #2137713)

Utilizator filip.mihalutMihalut Filip filip.mihalut Data 20 februarie 2018 23:39:21
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
#define Nmax 400009

using namespace std;

ifstream f ("apm.in");
ofstream g ("apm.out");

struct filip{
    int x,y,c;
}v[Nmax];

bool cmp(int a,int b)
{
    return v[a].c < v[b].c;
}

int l[Nmax / 2] , poz[Nmax] , y ,x,n,m,i,xx,yy,ct,c;
vector < int > vec;

inline int grupa(int x)
{
    if(x == l[x])
        return x;
    l[x] = grupa(l[x]);
    return l[x];
}

inline void uneste(int x,int y)
{
    l[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;

    for(i = 1;i <= m;i++)
        poz[i] = l[i] = i;

    sort(poz + 1,poz + m + 1,cmp);

    for(i = 1;i <= m;i++)
    {
        xx = grupa(v[poz[i]].x);
        yy = grupa(v[poz[i]].y);
        if(xx != yy)
        {
            ct += v[poz[i]].c;
            uneste(xx,yy);
            vec.push_back(poz[i]);
        }
    }
    int l = vec.size();

    g << ct << '\n' << l << '\n';
    for(i = 0;i < l;i++)
        g << v[vec[i]].x << " " << v[vec[i]].y << '\n';
    return 0;
}