Pagini recente » Cod sursa (job #1652699) | Cod sursa (job #157818) | Cod sursa (job #2847122) | Cod sursa (job #1951667) | Cod sursa (job #2950632)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
bool query(int, int);
void join(int, int);
int find(int);
struct muchie
{
int a, b, c;
}m[400005];
vector< pair<int, int> > v;
int n, nrm, p[200005], cost;
int main()
{
int i;
fin>>n>>nrm;
for(i=1; i<=n; i++)
{
p[i]=i;
}
for(i=1; i<=nrm; i++)
{
fin>>m[i].a>>m[i].b>>m[i].c;
}
sort(m+1, m+nrm+1, [](muchie x, muchie y) {return x.c<y.c;});
for(i=1; i<=nrm; i++)
{
if(!query(m[i].a, m[i].b))
{
join(m[i].a, m[i].b);
cost+=m[i].c;
v.push_back(make_pair(m[i].a, m[i].b));
}
}
fout<<cost<<'\n';
fout<<n-1<<'\n';
for(auto k:v) fout<<k.first<<' '<<k.second<<'\n';
return 0;
}
int find(int nod)
{
if(p[nod]==nod) return nod;
p[nod]=p[find(p[nod])];
return p[nod];
}
void join(int a, int b)
{
int pa, pb;
pa=find(a);
pb=find(b);
if(pa!=pb) p[pa]=pb;
}
bool query(int a, int b)
{
int pa, pb;
pa=find(a);
pb=find(b);
return (pa==pb);
}