Cod sursa(job #1702877)

Utilizator bogdandvDamaschin Bogdan-Valentin bogdandv Data 15 mai 2016 18:29:19
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
int n,m;
struct muchii
{
    int nod1;
    int nod2;
    int dist;
}graf[200001];
int graf_ordonat[200001];
int gru[200001];
int lungime_totala;
vector<int> solutie_finala;
bool cresc(int fi,int se)
{
    return graf[fi].dist<graf[se].dist;
}
int get_group(int i)
{
    if(gru[i]==i)
        return i;
    else
        {gru[i]=get_group(gru[i]);
        return gru[i];
        }
}
int main()
{
    ifstream f("apm.in");
    ofstream g("apm.out");
    f>>n>>m;
    for(int i=0;i<m;i++)
        graf_ordonat[i]=i;
    for(int i=0;i<m;i++)
    {
        f>>graf[i].nod1>>graf[i].nod2>>graf[i].dist;
    }
    sort(graf_ordonat,graf_ordonat+m,cresc);
    //cout<<graf[graf_ordonat[0]].dist<<" "<<graf[graf_ordonat[1]].dist<<" "<<graf[graf_ordonat[2]].dist<<" "<<graf[graf_ordonat[3]].dist<<" "<<graf[graf_ordonat[4]].dist<<" \n";
    for(int i=0;i<n;i++)
        gru[i]=i;
    for(int i=0;i<m;i++)
    {
        if(get_group(graf[graf_ordonat[i]].nod1)!= get_group(graf[graf_ordonat[i]].nod2))
        {
            lungime_totala+=graf[graf_ordonat[i]].dist;
            solutie_finala.push_back(graf_ordonat[i]);
            gru[get_group(graf[graf_ordonat[i]].nod1)]=get_group(graf[graf_ordonat[i]].nod2);
        }
    }
    g<<lungime_totala<<"\n";
    g<<solutie_finala.size()<<"\n";
    for(int i=0;i<solutie_finala.size();i++)
    {
        g<<graf[solutie_finala[i]].nod1<<" "<<graf[solutie_finala[i]].nod2<<"\n";
    }
    return 0;
}