Cod sursa(job #1606110)

Utilizator silviu12vranau silviu12 Data 19 februarie 2016 21:12:42
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n,m;
struct muchie
{
    int x;
    int y;
    int cost;
};
muchie v[210];
void citire()
{
    f>>n>>m;
    for(int i=1; i<=m; i++)
    {
        f>>v[i].x>>v[i].y>>v[i].cost;
    }
}
void afisare()
{
    for(int i=1; i<=m; i++)
    {
        g<<v[i].x<<" " << v[i].y << " " << v[i].cost << "\n";
    }
}
int cmp(muchie a,muchie b)
{
    return a.cost<b.cost;
}
int ex[100];
void initia()
{
    for(int i=1; i<=n; i++)
    {
        ex[i]=i;
    }
}
vector <int> v1;
void Kruskal()
{
    int j=1;int t=0;
    int costtot=0;
    int aux;
    for(int i=1; i<n; i++)
    {
        int x1=v[i].x;
        int y1=v[i].y;
        if(ex[x1]==ex[y1])i--;            ///elimin v[j]

        else
        {
            t++;
             //g << x1 << ' ' << y1 << '\n';
             v1.push_back(i);
            costtot+= v[j].cost;
            aux=ex[y1];
            for(int k=1; k<=n; k++)
            {
                if(ex[k]==aux)
                {
                    ex[k]=ex[x1];
                }
            }

        }
        j++;
    }
    g<<"cost tot "<< " " << costtot<<"\n";
    g <<"nr. mushii: "<<v1.size()<<"\n";
    for(int i=0;i<v1.size();++i){
        g <<v[v1[i]].x<<" "<<v[v1[i]].y<<"\n";
    }

}

int main()
{
    citire();
    sort(v+1,v+m+1,cmp);
   // afisare();
   initia();
     Kruskal();
    return 0;
}