Pagini recente » Cod sursa (job #1215466) | Cod sursa (job #1344403) | Cod sursa (job #1955769) | Cod sursa (job #2149222) | Cod sursa (job #532720)
Cod sursa(job #532720)
#include<cstdio>
#include<algorithm>
using namespace std;
int n, m, tata[200001];
struct list
{
int x,y,c,viz;
};
list a[400001];
struct cmp
{
bool operator()(const list &a, const list &b)
{
return a.c < b.c;
}
};
void citire()
{
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; ++i)
tata[i] = i;
for(int i = 1 ;i <= m ;++i)
{
scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].c);
a[i].viz = 0;
}
}
int rad(int x)
{
int L = x;
while(tata[L] != L)
L = tata[L];
while(tata[x] != x)
{
int aux = tata[x];
tata[x] = L;
x = aux;
}
}
void solve()
{
sort(a+1,a+m+1,cmp());
int nr=0,cost=0;
for(int i = 1; i <= m; ++i)
{
if(rad(a[i].x) != rad(a[i].y))
{
tata[rad(a[i].x)] = tata[rad(a[i].y)];
cost += a[i].c;
a[i].viz = 1;
++nr;
}
}
printf("%d\n%d\n",cost,nr);
for(int i = 1;i <= m; ++i)
if(a[i].viz == 1)
printf("%d %d\n",a[i].x,a[i].y);
}
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
citire();
solve();
return 0;
}