#include #include #define in 1000 #define out 1001 int dodaj(int a, int b); int tablica[1000][1002], liczby[1000]; int wys=1; int main() { int a, b, i; char znak; memset(liczby, -1, sizeof(int)*1000); while(scanf("%c", &znak)!=EOF) { switch(znak) { case '(': { scanf("%d,%d)", &a, &b); /*printf("(%d,%d) ", a, b);*/ if(a!=b) dodaj(a,b); /*printf("out %d in %d ", tablica[a][out], tablica[b][in]);*/ } break; case '\n': { wysokosc(); printf("%d ", wys); wys=1; } break; default: break; } } /*wys=1; wysokosc(); printf("%d\n", wys);*/ return 0; } int dodaj(int a, int b) { tablica[a][b]=1; tablica[a][out]++; tablica[b][in]++; } int wysokosc() { int i,j,k,l,tab,jeden; do { jeden=0; for(i=0, tab=0; i<1000; i++) { if(tablica[i][out]==0 && tablica[i][in]>0) { liczby[tab]=i; tab++; jeden=1; } } if(liczby[0]!=-1) wys++; for(i=0; liczby[i]!=-1; i++) { /*końcowy wierzcholek*/ l=liczby[i]; j=tablica[l][in]; tablica[l][in]=0; for(k=0; j>0 && k<1000; k++) /*kolumna koncowego wierzcholka*/ { if(tablica[k][l]==1) { tablica[k][l]=0; tablica[k][out]--; j--; } } } memset(liczby, -1, sizeof(int)*tab); } while(jeden); }