Pagini recente » Cod sursa (job #259266) | Cod sursa (job #1529325) | Cod sursa (job #470310) | Cod sursa (job #2872182) | Cod sursa (job #2723164)
#include <bits/stdc++.h>
#define mt make_tuple
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m,sum,t[200001],h[200001],nr;
vector<tuple<int,int,int> >muchii;
int comp(tuple<int,int,int> x, tuple<int,int,int> y)
{
return get<0>(x)<get<0>(y);
}
int radacina(int x)
{
int r=x,next;
while(r!=t[r])
r=t[r];
while(t[x]!=r)
{
next=t[x];
t[x]=r;
x=next;
}
return r;
}
void uniune(int x,int y)
{
if(h[y]>h[x])
t[x]=y;
else
{
t[y]=x;
if(h[x]==h[y])h[x]++;
}
}
int main()
{
int x,y,c,i,r1,r2;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
muchii.push_back(mt(c,x,y));
}
for(i=1;i<=n;i++)
t[i]=i,h[i]=1;
sort(muchii.begin(),muchii.end(),comp);
for(i=0;i<muchii.size();i++)
{
tie(c,r1,r2)=muchii[i];
r1=radacina(r1);
r2=radacina(r2);
if(r1!=r2)
{
sum+=c;
get<0>(muchii[i])=2000;
nr++;
uniune(r1,r2);
}
}
fout<<sum<<'\n'<<nr<<'\n';
for(i=0;i<muchii.size();i++)
{
if(get<0>(muchii[i])==2000)
fout<<get<1>(muchii[i])<<" "<<get<2>(muchii[i])<<'\n';
}
}