Pagini recente » Istoria paginii utilizator/radu684 | Istoria paginii utilizator/bozgaandrei | Diferente pentru utilizator/stay_awake77 intre reviziile 40 si 41 | Rating Viscun-Munteanu Grigore (Skarr123) | Cod sursa (job #2941856)
#include <bits/stdc++.h>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct much
{
int x,y,c;
}v[400005];
int t[200005];
much ras[200005];
bool cmp(much a, much b)
{
return a.c<b.c;
}
int tata(int nod)
{
if(t[nod]==nod)
return nod;
return t[nod]=tata(t[nod]);
}
void join(int x, int y)
{
x=tata(x);
y=tata(y);
t[x]=y;
}
int main()
{
int n,m,x,y,c;
in>>n>>m;
for(int i=0;i<n;i++)
t[i]=i;
for(int i=0;i<m;i++)
{
much a;
in>>x>>y>>c;
x--;y--;
a.x=x;
a.y=y;
a.c=c;
v[i]=a;
}
sort(v,v+m,cmp);
int cnt=0,suma=0;
for(int i=0;i<m;i++)
{
if(tata(v[i].x)!=tata(v[i].y))
{
join(v[i].x,v[i].y);
ras[cnt++]=v[i];
suma+=v[i].c;
}
if(cnt==n-1)
break;
}
out<<suma<<'\n'<<n-1<<'\n';
for(int i=0;i<n-1;i++)
out<<ras[i].x+1<<" "<<ras[i].y+1<<'\n';
return 0;
}