Cod sursa(job #2779725)

Utilizator puica2018Puica Andrei puica2018 Data 4 octombrie 2021 19:31:51
Problema Arbore partial de cost minim Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;
int p[105],x[105],y[105],c[105],r[105],ans[105],k,cost;

int root(int v)
{
    if(r[v]!=v)
        r[v]=root(r[v]);
    return r[v];
}

void unite(int x,int y)
{
    int r1=root(x),r2=root(y);
    if(r1!=r2)
        r[r1]=r2;
}

bool cmp(int i,int j)
{
    return c[i]<c[j];
}

int main()
{
    fin>>n>>m;
    int i;
    for(i=1; i<=m; i++)
    {
        fin>>x[i]>>y[i]>>c[i];
        p[i]=i;
    }
    for(i=1; i<=n; i++)
        r[i]=i;
    sort(p+1,p+m+1,cmp);
    for(i=1; i<=m; i++)
    {
        int rx=root(x[p[i]]),ry=root(y[p[i]]);
        if(rx!=ry)
        {
            unite(rx,ry);
            cost+=c[p[i]];
            ans[++k]=p[i];
        }
    }
    fout<<cost<<"\n"<<n-1<<"\n";
    for(i=1; i<=k; i++)
        fout<<x[ans[i]]<<" "<<y[ans[i]]<<"\n";
    return 0;
}