Cod sursa(job #2368487)

Utilizator PaduraruCristianPaduraru Cristian Daniel PaduraruCristian Data 5 martie 2019 16:21:23
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

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

#define N 200001
int n,m,rad[N];
vector <int> qq[N];
queue <pair <int,int> > qqq;

void cclear(int radacina,int newt)
{
    rad[radacina]=newt;
    qq[newt].push_back(radacina);
    for(int j=0;j<qq[radacina].size();++j)
    {
        rad[qq[radacina][j]]=newt;
        qq[newt].push_back(qq[radacina][j]);
    }
}


struct muchie{
    int x,y,c;
};
vector <muchie> q;
bool cmp(muchie a,muchie b)
{
    return a.c<b.c;
}

int main()
{
    int i;
    muchie v;
    f>>n>>m;
    for(i=1;i<=n;++i)
        rad[i]=i;
    for(i=1;i<=m;++i)
    {
        f>>v.x>>v.y>>v.c;
        q.push_back(v);
    }
    sort(q.begin(),q.end(),cmp);
    int k=1,s=0;
    for(i=0;k<n;++i)
    {
        if(rad[q[i].x]!=rad[q[i].y])
        {
            s+=q[i].c;
            k++;
            qqq.push(make_pair(q[i].x,q[i].y));
            if(qq[rad[q[i].x]].size()>qq[rad[q[i].y]].size())
            {
                cclear(rad[q[i].y],rad[q[i].x]);
            }
            else
            {
                cclear(rad[q[i].x],rad[q[i].y]);
            }

        }
    }
    g<<s<<"\n"<<n-1;
    while(qqq.empty()==false)
    {
        g<<"\n"<<qqq.front().first<<" "<<qqq.front().second;
        qqq.pop();
    }
    return 0;
}