Cod sursa(job #2717211)

Utilizator BaraianTudorBaraian Tudor Stefan BaraianTudor Data 6 martie 2021 18:04:03
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
int n,m,t[200005],sum;
struct e
{
    int x,y,cost;
};
e v[400005];
vector <e> sol;
int ind[400005];
bool cmp(int i,int j)
{
    return v[i].cost<v[j].cost;
}
int tata(int nod)
{
    if(t[nod]==nod)return nod;
    return (t[nod]=tata(t[nod]));
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        if(i<=n)t[i]=i;
        in>>v[i].x>>v[i].y>>v[i].cost;
        ind[i]=i;
    }
    sort(ind+1,ind+m+1,cmp);
    for(int it=1;it<=m;++it)
    {
        int i=ind[it];
        if(tata(v[i].x)!=tata(v[i].y))
        {
            t[tata(v[i].y)]=tata(v[i].x);
            sum+=v[i].cost;
            sol.push_back({v[i].x,v[i].y,v[i].cost});
        }
    }
    out<<sum<<'\n';
    out<<sol.size()<<'\n';
    for(auto i:sol)
    {
        out<<i.x<<' '<<i.y<<'\n';
    }
    return 0;
}