Cod sursa(job #1435971)

Utilizator maricasorinSorin-Gabriel maricasorin Data 14 mai 2015 20:52:29
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>

using namespace std;

struct triplu
{
    int a,b,cost;
};

bool comp (triplu i,triplu j) { return (i.cost<j.cost); }

int find_set(int *t,int x)
{
    if (t[x]==0) return x;
        else find_set(t,t[x]);
}

int uniune(int *t,int x,int y)
{
    if (find_set(t,x)!=find_set(t,y))
    {
        t[find_set(t,x)]=find_set(t,y);
        return 1;
    }
    return 0;
}

int main()
{
    int n,m;
    vector <triplu> v;
    ifstream f("apm.in");
    f>>n>>m;
    triplu x;
    for (int i=0;i<m;i++)
    {
        f>>x.a>>x.b>>x.cost;
        v.push_back(x);
    }
    sort(v.begin(),v.end(),comp);
    int cost=0,*t,j=0;
    t=new int[n];
    for (int i=0;i<n;i++) t[i]=0;
    for (int i=0;i<n-1;i++)
    {
        while (uniune(t,v[j].a-1,v[j].b-1)==0) j++;
        cost+=v[j].cost;
        j++;
    }
    ofstream g("apm.out");
    g<<cost<<endl<<n-1<<endl;
    for (int i=0;i<n;i++) if (t[i]!=0) g<<i+1<<" "<<t[i]<<endl;
    return 0;
}