Pagini recente » Cod sursa (job #109838) | Cod sursa (job #1886751) | Cod sursa (job #596586) | Cod sursa (job #1107948) | Cod sursa (job #1127679)
#include <fstream>
#include <algorithm>
#include <vector>
#define Nmax 200009
#define Mmax 400099
#define pb push_back
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int N,M,T[Nmax],cost;
struct much
{
int x,y,c;
}E[Mmax];
vector < much > sol;
bool cmp(much A,much B)
{
return A.c<B.c;
}
int gr(int node)
{
if(node!=T[node])T[node]=gr(T[node]);
return T[node];
}
void Reunion(int x,int y)
{
T[gr(x)]=gr(y);
}
int main()
{
f>>N>>M;
for(int i=1;i<=M;++i)
f>>E[i].x>>E[i].y>>E[i].c;
sort(E+1,E+1+M,cmp);
for(int i=1;i<=N;++i)T[i]=i;
for(int i=1;i<=M && sol.size()!=N-1;++i)
if(gr(E[i].x)!=gr(E[i].y))
cost+=E[i].c, sol.pb(E[i]), Reunion(E[i].x,E[i].y);
g<<cost<<'\n';
g<<sol.size()<<'\n';
for(int i=0;i<sol.size();++i)
g<<sol[i].x<<' '<<sol[i].y<<'\n';
f.close();g.close();
return 0;
}