Pagini recente » Cod sursa (job #3001279) | Cod sursa (job #1855424) | Cod sursa (job #1049376) | Cod sursa (job #572531) | Cod sursa (job #2568445)
#include <bits/stdc++.h>
using namespace std;
const int dim = 200001;
const int dim1 = 400001;
ifstream in("apm.in");
ofstream out("apm.out");
struct a
{
int x, y, c;
}muchii[dim1];
struct nod
{
int r;
nod* p;
};
int n, m, v[dim1], k;
nod* mu[dim];
bool cmp(a x, a y)
{
return x.c < y.c;
}
nod* multime(nod* x)
{
if(x != x->p)
x->p = multime(x->p);
return x->p;
}
void unite(nod* x, nod* y)
{
nod* a = multime(x);
nod* b = multime(y);
if(a->r < b->r)
a->p = b;
else if(b->r < a->r)
b->p = a;
else
{
a->p = b;
(b->r)++;
}
}
void read()
{
in>>n>>m;
int x, y, c;
for(int i = 1; i <= m; i++)
{
in>>x>>y>>c;
muchii[i].x = x;
muchii[i].y = y;
muchii[i].c = c;
}
for(int i = 1;i <= n;i++)
{
mu[i] = new nod;
mu[i]->p = mu[i];
mu[i]->r = 0;
}
sort(muchii + 1, muchii + m + 1, cmp);
}
void solve()
{
k = 0;
int s = 0;
for(int i = 1;i <= m;i++)
{
if(multime(mu[muchii[i].x]) != multime(mu[muchii[i].y]))
{
unite(mu[muchii[i].x], mu[muchii[i].y]);
s += muchii[i].c;
v[++k] = i;
}
}
out<<k<<'\n'<<s<<'\n';
for(int i = 1;i <= k;i++)
{
out<<muchii[v[i]].x<<' '<<muchii[v[i]].y<<'\n';
}
}
int main()
{
read();
solve();
return 0;
}