Pagini recente » Cod sursa (job #558238) | Cod sursa (job #2305510) | Cod sursa (job #86227) | Cod sursa (job #2808537) | Cod sursa (job #680121)
Cod sursa(job #680121)
#include<stdio.h>
#include<algorithm>
#include<bitset>
#define Nmax 200001
using namespace std;
int N,M,t[Nmax];
struct muchie
{
int x,y,c;
}G[Nmax];
void read()
{
FILE*f = fopen("apm.in","r");
fscanf(f,"%d%d",&N,&M);
int i,x,y,c;
for(i=1;i<=M;++i)
fscanf(f,"%d%d%d",&G[i].x,&G[i].y,&G[i].c);
}
int find(int x)
{
int r,init = x,y;
while(t[x] != x)
x = t[x];
r = x;
while(t[init] != init)//compress
{
y = t[init];
t[init] = r;
init = y;
}
return r;
}
void unite(int x,int y)
{
t[y] = x;
}
int cmp(muchie a,muchie b)
{
return (a.c<b.c);
}
int main()
{
read();
sort(G+1,G+M+1,cmp);
int i,cnt=1,cost = 0;
bitset<Nmax> viz;
viz.reset();
for(i=1;i<=N;++i)
t[i] = i;
for(i=1;cnt<N;++i)
{
if(find(G[i].x) != find(G[i].y))
{
unite(t[G[i].x],t[G[i].y]);
viz[i] = true;
cost += G[i].c;
++cnt;
}
}
FILE*g = fopen("apm.out","w");
fprintf(g,"%d\n%d\n",cost,N-1);
for(i=1;i<=M;++i)
if(viz[i]==true)
fprintf(g,"%d %d\n",G[i].x,G[i].y);
fclose(g);
return 0;
}