Pagini recente » Cod sursa (job #2928070) | Cod sursa (job #2964989) | Cod sursa (job #1994293) | Istoria paginii runda/kikis_delivery_service/clasament | Cod sursa (job #2697532)
#include <iostream>
#include <fstream>
#include<vector>
#define NMAX 400000
using namespace std;
ifstream f("kruskal.in");
ofstream g("kruskal.out");
int n,m,x,y,c,grupuri[NMAX],cost_total;
struct muchie
{
int x,y,c;
} V[NMAX],W[NMAX];
//functie de sortare crescatoare a vectorului in functie de cost
void sortare(muchie V[NMAX], int n)
{
for(int i = 1; i <m; i++)
{
for(int j = i + 1; j <=m; j++)
{
if(V[i].c > V[j].c)
{
muchie aux = V[i];
V[i] = V[j];
V[j] = aux;
}
}
}
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
f>>V[i].x>>V[i].y>>V[i].c;
}
sortare(V,n);
for(int i=1; i<=m; i++)
int k=1;
for(int i=1; i<=m; i++)
{
if(grupuri[V[i].x]==0&& grupuri[V[i].y]==0)
{
grupuri[V[i].x]=k;
grupuri[V[i].y]=k;
W[i].x=V[i].x;
W[i].y=V[i].y;
W[i].c=V[i].c;
k++;
}
if(grupuri[V[i].x]==0&&grupuri[V[i].y]!=0)
{
grupuri[V[i].x]=grupuri[V[i].y];
W[i].x=V[i].x;
W[i].y=V[i].y;
W[i].c=V[i].c;
}
if(grupuri[V[i].x]!=0&&grupuri[V[i].y]==0)
{
grupuri[V[i].y]=grupuri[V[i].x];
W[i].x=V[i].x;
W[i].y=V[i].y;
W[i].c=V[i].c;
}
if(grupuri[V[i].x]!=0&& grupuri[V[i].y]!=0&&grupuri[V[i].x]!= grupuri[V[i].y])
{
int aux,aux2;
aux=grupuri[V[i].x];
aux2=grupuri[V[i].y];
W[i].x=V[i].x;
W[i].y=V[i].y;
W[i].c=V[i].c;
for(int j=1; j<=n; j++)
{
if(grupuri[j]==aux)
grupuri[j]=aux2;
}
}
}
/* for(int k=1; k<=n; k++)
{
if(grupuri[k]!=0)
cout<<grupuri[k]<<" ";
}
cout<<endl;*/
for(int i=1; i<=m; i++)
{
if(W[i].x!=0&&W[i].y)
{
cost_total=cost_total+W[i].c;
g<<"["<<W[i].x<<"->"<<W[i].y<<"] "<<endl;
}
}
g<<cost_total;
return 0;
}