Pagini recente » Clasament simulare_izho_1 | Cod sursa (job #1681872) | Cod sursa (job #207278) | Cod sursa (job #1950518) | Cod sursa (job #1414034)
#include <cstdio>
#include <algorithm>
#define nmax 200005
using namespace std;
pair<int,pair<int,int> > g[2*nmax];
pair<int,int> sol[nmax];
int n,m,t[nmax],s,vf;
void citire()
{
int x,y,c;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&c);
g[i]=make_pair(c,make_pair(x,y));
}
for(int i=1;i<=n;i++)
t[i]=i;
}
int tata(int x)
{
if(t[x]==x)
return x;
t[x]=tata(t[x]);
return t[x];
}
void uneste(int x,int y)
{
t[t[x]]=t[y];
sol[++vf]=make_pair(x,y);
}
void kruskal()
{
int x,y,c;
for(int i=1;i<=m;i++)
{
c=g[i].first;
x=g[i].second.first;
y=g[i].second.second;
if(tata(x)!=tata(y))
{
uneste(x,y);
s+=c;
}
}
}
void afisare()
{
printf("%d\n%d\n",s,vf);
for(int i=1;i<=vf;i++)
printf("%d %d\n",sol[i].first,sol[i].second);
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
citire();
sort(g+1,g+m+1);
kruskal();
afisare();
return 0;
}