Cod sursa(job #2328025)

Utilizator TlinxSalagean Dragos Tlinx Data 25 ianuarie 2019 12:21:12
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.8 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct muchie{
    int x,y,cost,exists;
};
vector <muchie> muchii;
bool conditie(muchie i,muchie j){
    if(i.cost<j.cost)
        return true;
    else
        return false;
}
int belongs[200001];

int main()
{
    int N,M,i,x,y,c;
    muchie a;
    a.x=0;
    a.y=0;
    a.cost=-1001;
    in>>N>>M;
    muchii.push_back(a);
    for(i=0;i<M;i++)
    {
        in>>x>>y>>c;
        a.cost=c;
        a.x=x;
        a.y=y;
        a.exists=0;
        muchii.push_back(a);
    }
    int j;

    sort(muchii.begin(),muchii.end(),conditie);
    int suma=0;
    for(i=1;i<=M;i++)
    {
        if(belongs[muchii[i].x]!=belongs[muchii[i].y]){
            if(belongs[muchii[i].x]!=0&&belongs[muchii[i].y]!=0)
            {
                int remember=belongs[muchii[i].x];
                for(j=1;j<=M;j++){
                    if(belongs[j]==remember)
                        belongs[j]=belongs[muchii[i].y];
                }
            }
            else
            {
                if(belongs[muchii[i].x]==0)
                    belongs[muchii[i].x]=belongs[muchii[i].y];
                if(belongs[muchii[i].y]==0)
                    belongs[muchii[i].y]=belongs[muchii[i].x];
            }
            muchii[i].exists=1;
            suma+=muchii[i].cost;
        }
        if(belongs[muchii[i].x]==0){
            belongs[muchii[i].x]=belongs[muchii[i].y]=i;

            suma+=muchii[i].cost;
            muchii[i].exists=1;
        }
    }
    out<<suma<<"\n";
    for(i=1;i<=M;i++){
        if(muchii[i].exists)
        {
            out<<muchii[i].x<<" "<<muchii[i].y<<" "<<muchii[i].cost<<"\n";
        }
    }
    return 0;
}