Pagini recente » Clasament baraj-ichb2021 | Cod sursa (job #2617084) | 14_martie_simulare_oji_2024_clasele_11_12 | Cod sursa (job #1462057) | Cod sursa (job #632453)
Cod sursa(job #632453)
#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;
}