Cod sursa(job #1425767)

Utilizator bogdhyNiculescu Bogdan bogdhy Data 27 aprilie 2015 23:41:12
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<bits/stdc++.h>

using namespace std;

#define muchie pair<int,int>

class graf
{
    int n,m,x,y,c,px,py,costtotal=0;
    vector <pair <int,muchie> > G,MST;
    vector <int> parinti;
    int gasit(int x);
public:
    graf(char* filename);
    void mst();
};

graf::graf(char *filename)
{
    int i;
    ifstream f(filename);
    f>>n>>m;
    for(i=0;i<=n;i++)
        parinti.push_back(i);
    for(i=0;i<=m;i++)
    {
        f>>x>>y>>c;
        G.push_back(pair<int,muchie>(c,make_pair(x,y)));
    }

}

int graf::gasit(int x)
{
    if(x!=parinti[x])
        parinti[x]=gasit(parinti[x]);
    return parinti[x];
}

void graf::mst()
{

    sort(G.begin(),G.end());
    for(int i=0;i<m;i++)
    {
        px=gasit(G[i].second.first);
        py=gasit(G[i].second.second);
        if((px)!=(py))
        {

            MST.push_back(G[i]);
            costtotal+=G[i].first;
            parinti[px]=parinti[py];
        }
    }

    for(int i=0;i<MST.size();i++)
        cout<<"("<<MST[i].second.first<<" "<<MST[i].second.second<<" ) :"<<MST[i].first<<endl;
    cout<<"Costul minim total este :"<<costtotal<<endl;
}



int main()
{
    graf X("graf.txt");
    X.mst();
    return 0;
}