Cod sursa(job #3005401)

Utilizator aaagabiTurbinca Gabriel aaagabi Data 16 martie 2023 22:35:45
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");

int n,m;
int tata[400005],marime[400005];

struct date
{
    int x,y,cost;
} muchii[400005];
bool sortbycomp(date a,date b)
{
    return a.cost<b.cost;
}
int root(int a)
{
    if(tata[a]==a)
        return a;
    else
        return tata[a]=root(tata[a]);
}
void unire(int x,int y)
{
    x=root(x);
    y=root(y);
    if(x!=y)
    {
    if(marime[x]<marime[y])
        swap(x,y);
    tata[y]=x;
    marime[x]+=marime[y];
    }
}
int x,y,cost;
int ans;
vector <pair<int,int> > ras;
int main()
{
    ios_base::sync_with_stdio(0);
    fin.tie(0);
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>cost;
        muchii[i]={x,y,cost};
    }
    for(int i=1;i<=n;i++)
        tata[i]=i,marime[i]=1;
    sort(muchii+1,muchii+m+1,sortbycomp);
    for(int i=1;i<=m;i++)
        if(root(muchii[i].x)!=root(muchii[i].y))
        {
            int a=muchii[i].x;
            int b=muchii[i].y;
            unire(a,b);
            ras.push_back(make_pair(a,b));
            ans+=muchii[i].cost;
        }
    fout<<ans<<'\n';
    fout<<ras.size()<<'\n';
    for(int i=0;i<ras.size();i++)
    fout<<ras[i].first<<' '<<ras[i].second<<'\n';
    return 0;
}