Pagini recente » Cod sursa (job #2186997) | Cod sursa (job #2012627) | Cod sursa (job #1590052) | Cod sursa (job #554270) | Cod sursa (job #2227090)
#include <bits/stdc++.h>
#define fisiere 1
using namespace std;
/**************************************
*completeaza numele fisiereleor aici *
**************************************/
const string NUME_PROGRAM="apm";
#if fisiere==1
ifstream f(NUME_PROGRAM+".in");
ofstream g(NUME_PROGRAM+".out");
#endif // fisiere
const int N = 200010;
int n,m,i,x,y,cst,Cost,rx,ry,t[N],radacina(int);
tuple<int,int,int> M[2*N];
vector<pair<int,int>> e;
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
t[i]=i;
for(i=1;i<=m;i++)
{
f>>x>>y>>cst;
M[i]=make_tuple(cst,x,y);
}
sort(M+1,M+m+1);
for(i=1;i<=m;i++)
{
tie(cst,x,y)=M[i];
rx=radacina(x);
ry=radacina(y);
if(rx!=ry)
{
Cost+=cst;
t[rx]=ry;
e.push_back(make_pair(x,y));
}
}
g<<Cost<<'\n';
g<<e.size()<<'\n';
for(auto it:e)
g<<it.first<<' '<<it.second<<'\n';
return 0;
}
int radacina(int x)
{
if(t[x]==x)
return x;
t[x]=radacina(t[x]);
return t[x];
}