Pagini recente » Cod sursa (job #1404063) | Cod sursa (job #1304394) | Cod sursa (job #263222) | Cod sursa (job #903851) | Cod sursa (job #2935775)
#include <bits/stdc++.h>
using namespace std;
#define nmax 200000
#define mmax 400000
ifstream f("apm.in");
ofstream g("apm.out");
int t[nmax+5],rang[nmax+5];
struct graf{
int x,y,cost;
}v[mmax+5],a[mmax+5];
bool comp(graf a,graf b){
if(a.cost>b.cost)return false;
return true;
}
int radacina(int k){
if(t[k]==0)return k;
else{
int x=radacina(t[k]);
t[k]=x;
return x;
}
}
void unire(int a,int b){
int ra=radacina(a);
int rb=radacina(b);
if(ra!=rb){
if(rang[ra]>rang[rb])t[rb]=ra;
else{
t[ra]=rb;
if(rang[ra]==rang[rb])rang[rb]++;
}
}
}
int main()
{
int n,m,m1=0;
f>>n>>m;
for(int i=1;i<=m;++i)
f>>v[i].x>>v[i].y>>v[i].cost;
sort(v+1,v+m+1,comp);
int s=0;
for(int i=1;i<=m;++i)
{
int rx=radacina(v[i].x);
int ry=radacina(v[i].y);
if(rx!=ry){
s+=v[i].cost;
a[++m1]=v[i];
unire(rx,ry);
}
}
g<<s<<"\n"<<m1<<"\n";
for(int i=1;i<=m1;++i)
g<<a[i].x<<" "<<a[i].y<<"\n";
}