Pagini recente » Cod sursa (job #1095659) | Cod sursa (job #2427103) | Cod sursa (job #3145160) | Cod sursa (job #3264412) | Cod sursa (job #526171)
Cod sursa(job #526171)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,x,y,i,cost,X[400010],Y[400010],C[400010],IND[400010],T[400010],R[400010],grupa(int);
vector <int> MUCHII;
void read(),solve(),uneste(int,int);
int main()
{
read();
solve();
return 0;
}
bool comp(int x,int y)
{
return (C[x]<C[y]);
}
void read()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&X[i],&Y[i],&C[i]);
IND[i]=i;
T[i]=i;
}
for(i=1;i<=m;i++)
R[i]=1;
}
void solve()
{
sort(IND+1,IND+m+1,comp);
T[5]=2;
R[2]=2;
for(i=1;i<=m;i++)
{
x=grupa(X[IND[i]]);
y=grupa(Y[IND[i]]);
if(x!=y)
{
cost+=C[IND[i]];
uneste(x,y);
MUCHII.push_back(IND[i]);
}
}
printf("%d\n",cost);
//printf("%d\n",n-1);
//for(i=0;i<n-1;i++) printf("%d %d\n",X[MUCHII[i]],Y[MUCHII[i]]);
}
int grupa(int x)
{
int aux,t;
for(t=x;t!=T[t];t=T[t]);
for(;x!=T[x];)
{
aux=T[x];T[x]=t;x=aux;
}
return t;
}
void uneste (int x,int y)
{
if(R[x]>=R[y])T[y]=x,R[x]+=R[y];
else T[x]=y,R[y]+=R[x];
}