Pagini recente » Cod sursa (job #1609554) | Cod sursa (job #226783) | Cod sursa (job #651617) | Cod sursa (job #246592) | Cod sursa (job #2686449)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m;
struct nod
{
int p;
int d;
int x,y;
int cost;
} graf[200005];
struct muchie
{
int x,y;
} nodes[200005];
bool cmp(nod a, nod b)
{
if(a.cost <= b.cost)
return true;
return false;
}
int getRoot(int node)
{
if(graf[node].p == 0)
return node;
int p = getRoot(graf[node].p);
graf[node].d = graf[p].d;
graf[node].p = p;
return p;
}
void citire()
{
fin >> n >> m;
for(int i = 0; i < m; i++)
fin >> graf[i].x >> graf[i].y >> graf[i].cost;
}
void solve()
{
int c = 0;
sort(graf, graf + m, cmp);
int k = 0;
for(int i = 0; i < m; i++)
{
int r1 = getRoot(graf[i].x);
int r2 = getRoot(graf[i].y);
if(r1 != r2)
{
if(graf[r1].d == graf[r2].d)
{
graf[r2].p = r1;
graf[r1].d++;
}
else if(graf[r1].d > graf[r2].d)
{
graf[r2].p = r1;
}
else if(graf[r1].d < graf[r2].d)
{
graf[r1].p = r2;
}
c =c + graf[i].cost;
nodes[k].x = graf[i].x;
nodes[k++].y = graf[i].y;
}
}
fout << c << "\n";
fout << n - 1 << "\n";
for(int i = 0; i < n - 1; i++)
fout << nodes[i].x<< " " << nodes[i].y << "\n";
}
int main()
{
citire();
solve();
return 0;
}