Pagini recente » Cod sursa (job #1907146) | Cod sursa (job #2819664) | Cod sursa (job #2798846) | Cod sursa (job #2782884) | Cod sursa (job #2148965)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
const int nmax = 200005;
const int mmax = 400005;
struct muchie
{
int x,y,cost;
};
muchie a[mmax];
int parinte[nmax], cmin, siz_arb, parx, pary, n, m, i;
vector<int>ras[3];
vector<pair<int,int>> muchiiArb;
bool cmp(muchie A, muchie B)
{
return A.cost<B.cost;
}
int parent(int nod)
{
if(parinte[nod]==nod)
return nod;
/*else
parinte[nod] = parent(parinte[nod]);
return parinte[nod];*/
return parinte[nod] = parent(parinte[nod]);
}
void unite(int nodA, int nodB)
{
/*int parinteA, parinteB;
parinteA = parinte[nodA];
parinteB = parinte[nodB];
parinte[parinteA] = parinteB;*/
parinte[parent(nodA)] = parent(nodB);
}
int main()
{
f >> n >> m;
for(int i=1; i<=m; i++)
{
f >> a[i].x >> a[i].y >> a[i].cost;
//cout << a[i].x << ' ' << a[i].y << ' ' << a[i].cost << "\n";
}
for(int i=1; i<=n; i++)
parinte[i] = i;
sort(a+1, a+m+1, cmp);
for(int i=1; i<=m; i++)
{
//f >> a[i].x >> a[i].y >> a[i].cost;
cout << a[i].x << ' ' << a[i].y << ' ' << a[i].cost << "\n";
}
int i=1;
while(siz_arb != n-1)
{
//cout << siz_arb << ' ';
parx = parent(parinte[a[i].x]);
pary = parent(parinte[a[i].y]);
if(parx != pary)
{
muchiiArb.push_back({parx,pary});
cmin += a[i].cost;
unite(parx, pary);
siz_arb++;
}
i++;
}
//cout << cmin << "\n";
//cout << n-1 << "\n";
cout << "\n\n\n";
for(auto i:muchiiArb)
cout << i.second << ' ' << i.first << "\n";
return 0;
}