Pagini recente » Cod sursa (job #2716330) | Cod sursa (job #826220) | Cod sursa (job #211127) | Cod sursa (job #614237) | Cod sursa (job #414982)
Cod sursa(job #414982)
#include<fstream.h>
int v1[400100],v2[400100],cost[400100],h[400100],padre[200100],s[200100];
void qs(int i, int j)
{
int s=i,d=j,aux,piv=h[(i+j)>>1];
while(s<=d)
{
while(cost[h[s]]<cost[piv])
s++;
while(cost[h[d]]>cost[piv])
d--;
if(s<=d)
{
aux=h[d];
h[d]=h[s];
h[s]=aux;
s++;
d--;
}
}
if(s<j)
qs(s,j);
if(i<d)
qs(i,d);
}
int main()
{
int su=0,n,m,x,y,c,cx,cy,i;
ifstream f("apm.in");
ofstream g("apm.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>v1[i]>>v2[i]>>cost[i];
h[i]=i;
}
for(i=1;i<=n;i++)
padre[i]=i;
qs(1,m);
for(i=1;i<=m&&s[0]<n-1;i++)
{
cx=0;
cy=0;
x=v1[h[i]];
y=v2[h[i]];
while(x!=padre[x])
{
x=padre[x];
cx++;
}
while(y!=padre[y])
{
y=padre[y];
cy++;
}
if(x!=y)
{
if(cx>cy)
padre[y]=x;
else
padre[x]=y;
s[++s[0]]=h[i];
su+=cost[h[i]];
}
}
g<<su<<'\n';
g<<n-1<<'\n';
for(i=1;i<=n-1;i++)
g<<v1[s[i]]<<' '<<v2[s[i]]<<'\n';
return 0;
}