Pagini recente » Cod sursa (job #544018) | Cod sursa (job #2741955) | Cod sursa (job #2730709) | Cod sursa (job #699233) | Cod sursa (job #1046700)
//appm unificare pe verticala
//cu coada cu prioritate
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
struct muchie{int x,y,c;};
vector<pair<int,int> >sol;
struct compar{
bool operator() (muchie a,muchie b)
{
return b.c<a.c;
}
};
int ct,nr,n,m,i,t[205000],u,v,CT,h[200000],h1,h2;
priority_queue<muchie,vector<muchie>,compar> CP;
int radacina (int x)
{
while (t[x]!=0) x=t[x];
return x;
}
int main ()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%ld%ld",&n,&m);
muchie e;
for(i=1;i<=m;i++)
{
scanf("%ld%ld%ld",&e.x,&e.y,&e.c);
CP.push(e);
}
while(nr<n-1)
{
e=CP.top();
CP.pop();
u=radacina(e.x);
v=radacina(e.y);
if(u!=v)
{
sol.push_back(make_pair(e.x,e.y));
CT=CT+e.c;
nr++;
h1=h[u];
h2=h[v];
if(h1<h2)
t[u]=v;
else
{
if(h2<h1)
t[v]=u;
else
{
t[v]=u;
h[u]++;
}
}
}
}
printf("%ld\n",CT);
printf("%ld\n",nr);
for(i=0;i<sol.size();i++)
printf("%ld %ld\n",sol[i].first,sol[i].second);
}