Cod sursa(job #1805994)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 14 noiembrie 2016 18:53:39
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <tuple>
#include <algorithm>
#include <vector>

using namespace std;
vector<tuple<int,int,int>> v;
vector<pair<int,int>> s;
ifstream f("apm.in");
ofstream g("apm.out");
int n,i,j,x,y,c,m,cost,a[200010],b[200010],t[200010];
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
        t[i]=i;
    for(;m;m--)
    {
        f>>x>>y>>c;
        v.push_back(make_tuple(c,x,y));
    }
    sort(v.begin(),v.end());
    for(auto it:v)
    {
        tie(c,x,y)=it;
        a[1]=x;i=1;while(t[x]-x){x=t[x];i++;a[i]=x;}
        b[1]=y;j=1;while(t[y]-y){y=t[y];j++;b[j]=y;}
        if(x==y)
            continue;
        m++;cost+=c;s.push_back(make_pair(x,y));
        x=y;
        for(;i;i--)t[a[i]]=x;
        for(;j;j--)t[b[j]]=y;
        if(m==n-1)
            break;
    }
    g<<cost<<'\n'<<m<<'\n';
    for(auto it:s)
        g<<it.first<<' '<<it.second<<'\n';
    return 0;
}