Pagini recente » Cod sursa (job #1323138) | Cod sursa (job #2358445) | Cod sursa (job #1673985) | Cod sursa (job #1025827) | Cod sursa (job #2430800)
#include <bits/stdc++.h>
#define st first
#define nd second
#define pb push_back
using namespace std;
int n, m, i, j, care[200006], x, y, p, sum;
priority_queue <pair <int,pair <int,int> > > pq;
vector <int> v[200006];
vector <pair<int,int> > ans;
void unite(int m1, int m2)
{
for(int i=v[m2].size()-1;i>=0;i--)
{
care[v[m2][i]]=m1;
v[m1].pb(v[m2][i]);
v[m2].pop_back();
}
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&p);
pq.push({-p,{x,y}});
}
for(i=1;i<=n;i++)
{
v[i].pb(i);
care[i]=i;
}
while(!pq.empty())
{
pair <int,pair <int,int> > it=pq.top();
pq.pop();
int m1=care[it.nd.st], m2=care[it.nd.nd];
if(m1!=m2)
{
ans.pb({it.nd.st,it.nd.nd});
sum+=it.st*-1;
if(v[m1].size()>v[m2].size())
unite(m1,m2);
else unite(m2,m1);
}
}
printf("%d\n%d\n",sum,ans.size());
for(i=0;i<ans.size();i++)
printf("%d %d\n",ans[i].st,ans[i].nd);
return 0;
}