Cod sursa(job #1704584)

Utilizator ComanIonutComan Ionut ComanIonut Data 19 mai 2016 01:23:03
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;
struct nod{int nod1;int nod2;int cost;};

bool cmp(nod A,nod B)
{
    if(A.cost<=B.cost)
        return true;
    else
        return false;
}
void Initializare(int u,int *&r)
{
r[u]=u;
}
int Reprezentant(int u,int *&r)
{
return r[u];
}
void Reuneste(int u,int v,int n,int *&r)
{
  int r1,r2,k;
  r1=Reprezentant(u,r);//r1=r[u]
  r2=Reprezentant(v,r);//r2=r[v]
  for(k=0;k<n;k++)
    if(r[k]==r2)
       r[k]=r1;
}
int main()
{
    int n,m,i,nr,*r;
    nod muchie[100];
    //muchie=new nod;
    ifstream f("Date.in");
    f>>n;
    f>>m;
    r=new int[n+1];
    for(i=0;i<m;i++)
    {
        f>>muchie[i].nod1;
        f>>muchie[i].nod2;
        f>>muchie[i].cost;
    }
     for(i=0;i<m;i++)
        cout<<muchie[i].nod1<<"-"<<muchie[i].nod2<<"--"<<muchie[i].cost<<"; ";
    cout<<endl;
    sort(muchie,muchie+m,cmp);
    for(i=0;i<m;i++)
        cout<<muchie[i].nod1<<"-"<<muchie[i].nod2<<"--"<<muchie[i].cost<<"; ";
    cout<<endl;
    for(i=0;i<n;i++)
        r[i]=0;
    for(i=0;i<n;i++)
        Initializare(i,r);
    nr=0;
    for(i=0;i<m;i++)
     if(Reprezentant(muchie[i].nod1,r)!=Reprezentant(muchie[i].nod2,r))
       {
         cout<<muchie[i].nod1<<"-"<<muchie[i].nod2<<" ";
         Reuneste(muchie[i].nod1,muchie[i].nod2,n,r);
         nr++;
         if(nr==n-1)
             break;
       }

    return 0;
}