Cod sursa(job #632453)

Utilizator pbobitzaPirvanescu Livius pbobitza Data 11 noiembrie 2011 10:15:47
Problema Traseu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include<fstream>

using namespace std;

ifstream in("traseu.in");
ofstream out("traseu.out");

int viz[100],m,n,c=0;

struct {
int x,y,cost;


} v[100];



void citesc()
{
    in>>n;
    in>>m;
    for (int i=1;i<=m;++i)
      {
          in>>v[i].x;
          in>>v[i].y;
          in>>v[i].cost;
      }


}

void sortare()
{

    for (int i=1;i<n;++i)
     for (int j=i;j<=n;++j)
       {
           if (v[j].cost < v[i].cost)
            {
                aux=v[i].x;
                v[i].x=v[j].x;
                v[j].x=aux;

                 aux=v[i].y;
                v[i].y=v[j].y;
                v[j].y=aux;

                 aux=v[i].cost;
                v[i].cost=v[j].cost;
                v[j].cost=aux;

            }
       }



}

void kruskal()
{int i,j,k;
  i=1;
  for(k=1;k<=n-1;k++)
  {while(viz[v[i].x]==viz[v[i].y]&&viz[v[i].x]!=0)
      i++;
	c+=v[i].cost;
	//out<<v[i].x<<"  "<<v[i].y<<'\n';
	if(viz[v[i].x]+viz[v[i].y]==0)
	   viz[v[i].x]=viz[v[i].y]=v[i].x;
	else
	   if(viz[v[i].x]*viz[v[i].y]==0)
	      viz[v[i].x]=viz[v[i].y]=viz[v[i].x]+viz[v[i].y];
        else
	  {for(j=1;j<=n;j++)
	     if(viz[j]==viz[v[i].x]&&j!=v[i].x)
	       viz[j]=viz[v[i].y];
	   viz[v[i].x]=viz[v[i].y];
	  }
	i++;
	}
	out<<c;
}
int main()

{
    citesc();
    sortare();
    kruskal();

    return 0;
}