Pagini recente » Cod sursa (job #1397820) | Cod sursa (job #139173) | Cod sursa (job #1945032) | Cod sursa (job #806801) | Cod sursa (job #3150067)
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;
int f[200005], mar[200005];
int father(int x)
{
if(f[x]==x) return x;
else return father(f[x]);
}
int marime(int x)
{
x=father(x);
return mar[x];
}
int join(int x, int y)
{
x=father(x);
y=father(y);
if(x==y)
return 0;
if(mar[x]>mar[y])
{
mar[x]+=mar[y];
f[y]=x;
}
else
{
mar[y]+=mar[x];
f[x]=y;
}
return 0;
}
bool verif(int x, int y)
{
x=father(x);
y=father(y);
if(x==y)
return 1;
return 0;
}
struct muchie
{
int a, b, cost;
};
int cmp(muchie x, muchie y)
{
return x.cost<y.cost;
}
queue < pair< int, int > > q;
muchie v[400005];
int main()
{
ifstream cin("apm.in");
ofstream cout("apm.out");
int n, m, costt=0, cnt=0;
cin>>n>>m;
for(int i=0;i<=n;i++)
{
f[i]=i;
mar[i]=1;
}
for(int i=0;i<m;i++)
{
cin>>v[i].a>>v[i].b>>v[i].cost;
}
sort(v, v+m, cmp);
for(int i=0;i<m;i++)
{
if(verif(v[i].a, v[i].b)==0)
{
costt+=v[i].cost;
join(v[i].a, v[i].b);
cnt++;
q.push({v[i].a, v[i].b});
}
}
cout<<costt<<'\n'<<cnt<<'\n';
while(!q.empty())
{
cout<<q.front().first<<" "<<q.front().second<<'\n';
q.pop();
}
return 0;
}