Cod sursa(job #2116142)

Utilizator iuliaaa2110Barbu Iulia Andreea iuliaaa2110 Data 27 ianuarie 2018 12:53:11
Problema Arbore partial de cost minim Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct hey{int x,y,c;}v[400001];
int w[200001],fin[200001],s;
bool cmp(hey a, hey b)
{
    if(a.c<b.c)
        return true;
    return false;
}
int boss(int a)
{
    if(w[a]==a)
        return a;
    return w[a]=boss(w[a]);
}
void calculam(int x, int y, int b)
{
    if(boss(x)!=boss(y))
    {
        w[boss(x)]=boss(y);
        if(fin[x]==0)
            fin[x]=y;
        else
            fin[y]=x;
        s=s+b;
    }
}
int main ()
{
    int N,M,X,Y,C,i;
    f>>N>>M;
    for(i=1;i<=M;i++)
        f>>v[i].x>>v[i].y>>v[i].c;
    sort(v+1,v+M+1,cmp);
    for(i=1;i<=N;i++)
        w[i]=i;
    for(i=1;i<=M;i++)
    {
        calculam(v[i].x,v[i].y,v[i].c);
    }
    g<<s<<'\n';
    s=0;
    for(i=1;i<=N;i++)
    {
        if(fin[i]!=0)
            s++;
    }
    g<<s<<'\n';
     for(i=1;i<=N;i++)
    {
        if(fin[i]!=0)
            g<<i<<" "<<fin[i]<<" "<<'\n';
    }
    return 0;
}