Pagini recente » Cod sursa (job #3364698) | Cod sursa (job #3364699) | Cod sursa (job #3364684) | Cod sursa (job #3364692) | Cod sursa (job #3364685)
#include <bits/stdc++.h>
using namespace std;
const int nm=2e5+5;
int parent[nm], sz[nm];
pair<int, int> rez[nm];
struct Cows
{
int n1, n2, cost;
}v[2*nm];
int fin(int a)
{
if(a==parent[a])
return a;
return parent[a]=fin(parent[a]);
}
void unite(int a, int b)
{
a=fin(a);
b=fin(b);
if(sz[a]<sz[b])
swap(a, b);
parent[b]=a;
sz[a]+=sz[b];
sz[b]=0;
}
bool cmp(Cows a, Cows b)
{
return a.cost<b.cost;
}
int main()
{
ifstream cin("apm.in");
ofstream cout("apm.out");
int n, m, sum=0, pz=0;
cin>>n>>m;
for(int i=1; i<=n; i++)
{
parent[i]=i;
sz[i]=1;
}
for(int i=1; i<=m; i++)
cin>>v[i].n1>>v[i].n2>>v[i].cost;
sort(v+1, v+m+1, cmp);
for(int i=1; i<=m; i++)
{
if(fin(v[i].n1)!=fin(v[i].n2))
{
rez[++pz]={v[i].n1, v[i].n2};
sum+=v[i].cost;
unite(v[i].n1, v[i].n2);
}
}
cout<<sum<<'\n';
cout<<pz<<'\n';
for(int i=1; i<=pz; i++)
cout<<rez[i].first<<" "<<rez[i].second<<'\n';
return 0;
}