Cod sursa(job #2039158)

Utilizator DavidLDavid Lauran DavidL Data 14 octombrie 2017 12:06:20
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fi("apm.in");
ofstream fo("apm.out");

struct muchie
{
    int u,v,c;
};

muchie M[400005];
int n,m;
int p[200005];
vector < pair<int,int> > af;

int parinte(int nod)
{
    if (p[nod]==nod)
        return nod;
    return p[nod]=parinte(p[nod]);
}

int unite(int x,int y)
{
    p[parinte(x)]=parinte(y);
}

bool cmp(muchie a,muchie b)
{
    return a.c<b.c;
}

int main()
{
    fi>>n>>m;
    for (int i=1; i<=n; i++)
        p[i]=i;
    for (int i=1; i<=m; i++)
    {
        fi>>M[i].u>>M[i].v>>M[i].c;
    }
    sort(M+1,M+m+1,cmp);
    int muchiiAdd=0,rez=0;
    for (int i=1; i<=m; i++)
    {
        if (parinte(M[i].u)!=parinte(M[i].v))
        {
            rez+=M[i].c;
            muchiiAdd++;
            unite(M[i].u,M[i].v);
            af.push_back(make_pair(M[i].u,M[i].v));
        }
        if (muchiiAdd==n-1)
            break;
    }
    fo<<rez<<"\n"<<n-1<<"\n";
    for (auto it: af)
        fo<<it.first<<" "<<it.second<<"\n";
    return 0;
}