Cod sursa(job #2174050)

Utilizator tuddor1234Turdasan Tudor tuddor1234 Data 16 martie 2018 10:33:30
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#include <queue>

#define INF 50000
using namespace std;

ifstream fin("apm.in");
ofstream fout("apm.out");

struct triplet{
    int x,y,c;
    bool used;
};
triplet v[400005];

int f(triplet a,triplet b)
{
    return a.c<b.c;
}
long long int n,m,costTotal=0;

int TT[200005];



int find(int x)
{
   while(TT[x]!=x) x=TT[x];
   return TT[x];
}

void unite(int x,int y)
{
    x=find(x);
    y=find(y);
    int minim= min(x,y);
    int maxim= max(x,y);
    TT[maxim]=minim;
}


int totalUsed=0;
int noe;
int main()
{
    fin>>n>>m;
    noe=n-1;
    for(int i=1;i<=n;i++) TT[i]=i;
    for(int i=1;i<=m;i++)
    {
        fin>>v[i].x>>v[i].y>>v[i].c;
    }
    sort(v+1,v+m+1,f);

    for(int i=1;i<=m && noe>0 ;i++)
    {
        if(find(v[i].x)!=find(v[i].y))
        {
            totalUsed++;
            unite(v[i].x,v[i].y);
            costTotal+=v[i].c;
            v[i].used=true;
        }
    }
    fout<<costTotal<<'\n'<<totalUsed<<'\n';
    for(int i=1;i<=m;i++)
        if(v[i].used== true)
        fout<<v[i].y<<' '<<v[i].x<<endl;


    return 0;
}