Pagini recente » Cod sursa (job #2496460) | Cod sursa (job #883642) | Cod sursa (job #2335916) | Cod sursa (job #2813566) | Cod sursa (job #2400476)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct muchie
{
int x;
int y;
int c;
}v[400003];
int rang[200003];
int p[200003];
bool comp(muchie a,muchie b)
{
return a.c<b.c;
}
void create_set(int i)
{
p[i]=i;
rang[i]=0;
}
int find_set(int i)
{
if(p[i]!=i)
p[i]=find_set(p[i]);
return p[i];
}
int join_set(int a,int b)
{
int aroot=find_set(a);
int broot=find_set(b);
if(aroot==broot)
return 0;
else
{
if(rang[aroot]>rang[broot])
{
p[broot]=aroot;
}
else if(rang[aroot]<rang[broot])
{
p[aroot]=broot;
}
else
{
p[broot]=aroot;
rang[aroot]++;
}
return 1;
}
}
int main()
{
int n,m;
int i=1;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>v[i].x>>v[i].y>>v[i].c;
}
sort(v+1,v+m+1,comp);
for(i=1;i<=n;i++)
create_set(i);//pune elementele in multime diferita
int nr=0;
int cost=0;
i=1;
while(nr!=n-1)
{
if(join_set(v[i].x,v[i].y))
{
nr++;
// sol[nr].x=v[i].x;
// sol[nr].y=v[i].y;
cost+=v[i].c;
}
i++;
}
g<<cost<<"\n";
return 0;
}