Cod sursa(job #2470389)

Utilizator Dan_BDan Bugnariu Dan_B Data 9 octombrie 2019 09:32:29
Problema Arbore partial de cost minim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
#define Maxx 200002
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");

struct muchie{int x,y,c;}x;
vector<muchie> m;
vector<pair <int,int> > lista;
bool compareMuchie(muchie a,muchie b)
{
    return (a.c<b.c);
}
int n,k,tata[Maxx],s;

int tataa(int x)
{
    if(tata[x]!=x)
        return tataa(tata[x]);
    return x;
}
int main()
{
    in>>n>>k;
    for(int i=1;i<=n;i++)
        tata[i]=i;
    for(int i=1;i<=k;i++)
    {
        in>>x.x>>x.y>>x.c;
        m.push_back(x);
    }
    sort(m.begin(),m.end(),compareMuchie);
    for(auto a:m)
    {
        if(tataa(a.x)!=tataa(a.y))
        {
            s+=a.c;
            if(tata[a.x]==a.x && tata[a.y]==a.y)
            {
                if(a.x<a.y)
                    tata[a.y]=a.x;
                else
                    tata[a.x]=a.y;
            }
            else if(tata[a.x]==a.x)
                tata[a.x]=a.y;
            else if(tata[a.y]==a.y)
                tata[a.y]=a.x;
            else
                tata[tataa(a.x)]=a.y;
            lista.push_back({a.x,a.y});
        }
    }
    out<<s<<'\n'<<lista.size()<<'\n';
    for(auto a:lista)
        out<<a.first<<' '<<a.second<<'\n';
    return 0;
}