#include #include struct cycle { struct cycle *next; int nu; int *mem; }; struct cycle *Root = 0; int cmp(const void* a, const void* b) { return (*(int*)a - *(int*)b); } int main() { int N; int *L; int *S; scanf("%d", &N); L = (int*)malloc(sizeof(int)*N); S = (int*)malloc(sizeof(int)*N); int i; for (i=0; i N) { printf("!?\n"); exit(1); } for (i=path_i-1; i>=0; i--) { if (up == path[i]) { work_i = path_i - i; for (j=0; jnext) { if (p->mem[0] == work[0]) { goto SKIP; } } p = (struct cycle*)malloc(sizeof(struct cycle)); p->next = Root; Root = p; p->nu = work_i; p->mem = (int*)malloc(sizeof(int)*p->nu); for (j=0; jnu; j++) p->mem[j] = work[j]; goto SKIP; } } path[path_i] = up; path_i++; v[up-1] = 1; up = S[up-1]; } SKIP: ; } } int *ldwn = (int*)malloc(sizeof(int)*N); for (i=0; inext) { min = ~(1 << 31); for (i=0; inu; i++) { if (L[p->mem[i]-1] < min) { min = L[p->mem[i]-1]; min_i = p->mem[i]-1; } } ldwn[min_i] = 0; } float total = 0; for (i=0; i