#include #include struct node { struct node *otec; }; #define IX(v,s,r) ((v)*R*S + (s)*S + (r)) #define MAX (64*64*64*2) int V,R,S; int total_cena; int levne, drahe, lx[MAX], ly[MAX], dx[MAX], dy[MAX]; struct node *find(struct node *a) { struct node *b = a; while (b->otec != b) { b = b->otec; } a->otec = b; return b; } struct node mist[MAX]; void join(int m1, int m2, int cena) { struct node *a, *b; /* printf("%d %d %d (%d)\n", m1, m2, cena, V*R*S ); */ a = find(mist+m1); b = find(mist+m2); if (a != b) { total_cena += cena; a->otec = b; /* printf("Cena: %d\n", cena); */ } } void xjoin(int m1, int m2, int cena) { if (m1 >= (V*R*S)) printf("BLEE!"); if (m2 >= (V*R*S)) printf("BLEE!"); if (!cena) join(m1, m2, 0); if (cena == 1) { lx[levne] = m1; ly[levne] = m2; levne++; } if (cena == 2) { dx[drahe] = m1; dy[drahe] = m2; drahe++; } } void patro (int vyska) { char temp [1024]; int i,j; for (i = 0; i < R; i++) { gets (temp); for (j = 1; j < S; j++) xjoin (IX(vyska, i, j-1), IX(vyska, i, j), (temp [2 * j - 1] == '.') * 1); gets (temp); if (i == (R-1)) break; for (j = 0; j < S; j++) xjoin (IX (vyska, i, j), IX (vyska, i+1, j), (temp [2*j] == '.') * 1); } } void mezipatro (int vyska) { char temp [1024]; int i,j; for (i = 0; i < R; i++) { gets (temp); for (j = 0; j < S; j++) xjoin (IX (vyska, i,j), IX (vyska+1, i,j), (temp [2*j] == '.')*2); gets (temp); } } int main (int argc, char **argv) { while (1) { int i; /* gets (temp); */ /* scanf ("%d", &a); */ scanf("%d %d %d\n", &V, &R, &S); if (!V && !R && !S) return 0; total_cena = 0; levne = 0; drahe = 0; for (i=0; i= 1000000) { printf("%d,", total_cena / 1000000); printf("%03d,", (total_cena % 1000000) / 1000); printf("%03d", total_cena %1000); } else if (total_cena >= 1000) { printf("%d,", total_cena / 1000); printf("%03d", total_cena %1000); } else printf("%d", total_cena); printf(",000 Kc\n"); } } return 0; }