Pagini recente » Cod sursa (job #2610074) | Cod sursa (job #1988042) | Cod sursa (job #2832458) | Cod sursa (job #2905024) | Cod sursa (job #2028242)
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
priority_queue <pair<int,pair<int,int> > > q;
vector <pair<int,int> > sol;
int vTati[200005],vTati1[200005],cost=0,m,n;
void citire()
{
int aux1,aux2,aux3;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&aux1,&aux2,&aux3);
q.push(make_pair(-aux3,make_pair(aux1,aux2)));
}
}
int getTata(int nod)
{
while(vTati[nod]!=nod)
{
nod=vTati[nod];
}
return nod;
}
void apm()
{
for(int i=1;i<=n;i++)
vTati[i]=i;
int n1,n2,c;
while(!q.empty())
{
c=-q.top().first;
n1=q.top().second.first;
n2=q.top().second.second;
q.pop();
if(getTata(n1)!=getTata(n2))
{
vTati[getTata(n2)]=getTata(n1);
sol.push_back(make_pair(n1,n2));
cost+=c;
}
}
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
citire();
apm();
printf("%d\n%d\n",cost,n-1);
for(int i=0;i<n-1;i++)
{
printf("%d %d\n",sol[i].first,sol[i].second);
}
return 0;
}