Pagini recente » Cod sursa (job #153454) | Cod sursa (job #2938620) | Cod sursa (job #1044826) | Cod sursa (job #1360055) | Cod sursa (job #3005352)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m;
int tata[200005],marime[200005];
struct date
{
int x,y,cost;
} muchii[400005];
bool sortbycomp(date a,date b)
{
return a.cost<=b.cost;
}
int root(int a)
{
if(tata[a]==a)
return a;
else
return tata[a]=root(tata[a]);
}
void unire(int x,int y)
{
x=root(x);
y=root(y);
if(x!=y)
{
if(marime[x]<marime[y])
swap(x,y);
tata[y]=x;
marime[x]+=marime[y];
}
}
int x,y,cost;
int ans;
vector <pair<int,int> > ras;
int main()
{
ios_base::sync_with_stdio(0);
fin.tie(0);
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>cost;
muchii[i]={x,y,cost};
}
for(int i=1;i<=n;i++)
tata[i]=i,marime[i]=1;
sort(muchii+1,muchii+m+1,sortbycomp);
for(int i=1;i<=m;i++)
if(root(muchii[i].x)!=root(muchii[i].y))
{
int x=muchii[i].x;
int y=muchii[i].y;
unire(x,y);
ras.push_back({x,y});
ans+=muchii[i].cost;
}
fout<<ans<<'\n';
fout<<ras.size()<<'\n';
for(int i=0;i<ras.size();i++)
fout<<ras[i].first<<' '<<ras[i].second<<'\n';
return 0;
}