Cod sursa(job #2174542)

Utilizator RG1999one shot RG1999 Data 16 martie 2018 12:29:55
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;
int nxt,i,nd,n,m,x,y,z,vl,k,fth[200001],j,dad1,dad2,s;
struct muchie
{
    int x,y,z;
}mch;
vector <muchie> v,ans;
bool cmp(muchie a, muchie b)
{
    return a.z<b.z;
}
int T(int x)
{
    if (fth[x]!=x) fth[x]=T(fth[x]);
    return fth[x];
}
int main()
{
    freopen("apm.in","r",stdin);
    freopen("apm.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&mch.x,&mch.y,&mch.z);
        v.push_back(mch);
    }
    sort(v.begin(),v.end(),cmp);
    for(i=1;i<=n;i++)
        fth[i]=i;
    for(i=0;i<v.size();i++)
    {
        mch=v[i];
        dad1=T( mch.x);
        dad2=T( mch.y);
        if(dad1!=dad2)
        {
            fth[dad1]=dad2;
            s+= mch.z;
            ans.push_back( mch);
        }
    }
    printf("%d\n%d\n",s,ans.size());
    for(i=0;i<ans.size();i++)
        printf("%d %d\n",ans[i].x,ans[i].y);
    return 0;
}