Pagini recente » Cod sursa (job #637618) | Cod sursa (job #241485) | Cod sursa (job #2005183) | Cod sursa (job #345091) | Cod sursa (job #1445620)
#include <fstream>
#include <algorithm>
#define NMAX 400010
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
int n,m,i,cnt=0;
int costminim=0;
long long tata[NMAX/2];
struct muchie
{
int x,y,c;
}v[NMAX],v2[NMAX];
bool cmp(muchie a, muchie b)
{
if(a.c<b.c) return true;
return false;
}
int query(int x)
{
int R=x;
while(R!=tata[R]) R=tata[R];
while(x!=R)
{
int aux=tata[x];
tata[x]=R;
x=aux;
}
return R;
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++) tata[i]=i;
for(i=1;i<=m;i++)
{
in>>v[i].x>>v[i].y>>v[i].c;
}
sort(v+1,v+m+1,cmp);
for(i=1;i<=m;i++)
{
if(query(v[i].x)!=query(v[i].y))
{
tata[query(v[i].x)]=query(v[i].y);
costminim+=v[i].c;
cnt++;
v2[cnt].x=v[i].x;
v2[cnt].y=v[i].y;
}
}
out<<costminim<<'\n';
for(i=1;i<=cnt;i++)
{
out<<v2[i].x<<" "<<v2[i].y<<'\n';
}
in.close();
out.close();
return 0;
}