#include #include #define MAX_M 100000 #define MAX_N 1000 typedef struct{ int from; int to; int length; }T_EDGE; int ud[MAX_N]; /* Ukazatelé na nadřízené vrcholy */ int vn[MAX_N]; /* Velikosti podřízených komponent */ T_EDGE h[MAX_M]; /* Nalezne šéfa komponenty a přepíše odkazy na nadřízené */ int find_chief(int a) { int h, x=a; while (ud[a]!=a) a=ud[a]; while (ud[x]!=x){ h=ud[x]; ud[x]=a; x=h; } return a; } /* Spojí dvě komponenty */ void join(int a, int b) { a=find_chief(a); b=find_chief(b); if (vn[a] < vn[b]) { vn[b]+=vn[a]; ud[a]=b; } else { vn[a]+=vn[b]; ud[b]=a; } } int cmp(const void *a, const void *b) { return ((T_EDGE *)a)->length - ((T_EDGE *)b)->length; } int main(void) { int i, n, m, no_edge, sum; /* Inicializace */ for (i=0; i