Cod sursa(job #2428113)

Utilizator georgeoctavianGeorge Octavian Grumazescu georgeoctavian Data 3 iunie 2019 20:16:18
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
#define st first
#define nd second
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m,x,y,cost,nod,ans,tata[200010],use[200010],nr;
vector <pair<int,pair<int,int>>> v;
int fat(int x)
{
    if(tata[x]==x)
        return x;
    tata[x]=fat(tata[x]);
    return tata[x];
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>cost;
        v.push_back(make_pair(cost,make_pair(x,y)));
    }
    sort(v.begin(),v.end());
    for(int i=1;i<=n;i++)
        tata[i]=i;
    for(int i=0;i<m;i++)
    {
        x=v[i].nd.st;
        y=v[i].nd.nd;
        x=fat(x);
        y=fat(y);
        if(x!=y)
        {
            tata[y]=x;
            ans+=v[i].st;
            use[i]=1;
            nr++;
        }
    }
    fout<<ans<<'\n'<<nr<<'\n';
    for(int i=0;i<m;i++)
        if(use[i])
            fout<<v[i].nd.st<<' '<<v[i].nd.nd<<'\n';
    return 0;
}