Cod sursa(job #2450690)

Utilizator vladadAndries Vlad Andrei vladad Data 24 august 2019 11:48:54
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda repost Marime 1.07 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n, m, sz[200002], tt[200002];
int s, k;
pair<int, int>ans[200002];
struct mch
{
    int a, b, c;
}v[400004];
bool cmp(mch a, mch b)
{
    return a.c<b.c;
}
int Find(int nod)
{
    if(tt[nod]==nod)
        return nod;
    return tt[nod]=Find(tt[nod]);
}
void Union(int a, int b)
{
    if(sz[a]>=sz[b])
    {
        sz[a]+=sz[b];
        tt[b]=a;
    }
    else
    {
        sz[b]+=sz[a];
        tt[a]=b;
    }
}
int main()
{
    f>>n>>m;
    for(int i=1; i<=m; i++)
    f>>v[i].a>>v[i].b>>v[i].c;
    for(int i=1; i<=n; i++)
    {
        tt[i]=i;
        sz[i]=1;
    }
    sort(v+1, v+m+1, cmp);
    for(int i=1; i<=m; i++)
    {
        if(Find(v[i].a)!=Find(v[i].b))
        {
            Union(Find(v[i].a), Find(v[i].b));
            s+=v[i].c;
            ans[++k]=make_pair(v[i].a, v[i].b);
        }
    }
    g<<s<<'\n';
    g<<n-1<<'\n';
    for(int i=1; i<=k; i++)
        g<<ans[i].first<<' '<<ans[i].second<<'\n';
    return 0;
}