/* SWERC'98 - It's not a bug, it's a feature */ /* 10/31/98 - Matthias Ruhl */ #include #include #include #define MAXPATCH 1000 #define MAXBUGS 20 #define MAXSTATES 1048577 FILE *inp; int pre_yes[MAXPATCH],pre_no[MAXPATCH],post_yes[MAXPATCH],post_no[MAXPATCH]; int dist[MAXSTATES],hptr[MAXSTATES],h[MAXSTATES],t[MAXPATCH]; int n,m,hsize,case_no=1; int read_data() { char a[MAXBUGS+1],b[MAXBUGS+1]; int i,j; fscanf(inp,"%d %d",&n,&m); if(n == 0 && m == 0) return 0; for(i=0;i 1 && d < dist[h[p/2]]) { h[p] = h[p/2]; hptr[h[p]] = p; p /= 2; } h[p] = ptr; hptr[h[p]] = p; } void hsiftdn(int p) { int d,ptr; ptr = h[p]; d = dist[h[p]]; while(2*p <= hsize) { if(2*p+1 <= hsize && dist[h[2*p]] > dist[h[2*p+1]] && dist[h[2*p+1]] < d) { h[p] = h[2*p+1]; hptr[h[p]] = p; p = 2*p+1; } else if(dist[h[2*p]] < d) { h[p] = h[2*p]; hptr[h[p]] = p; p = 2*p; } else break; } h[p] = ptr; hptr[h[p]] = p; } void hpush(int s, int d) { if(dist[s] != -1 && dist[s] <= d) return; if(hptr[s] != -1) { dist[s] = -1; hsiftup(hptr[s]); assert(hptr[s] == 1); if(hsize > 1) { h[1] = h[hsize--]; hsiftdn(1); } else hsize = 0; } dist[s] = d; h[++hsize] = s; hptr[s] = hsize; hsiftup(hsize); } void hpop(int *s, int *d) { *s = h[1]; *d = dist[*s]; hptr[*s] = -1; h[1] = h[hsize--]; if(hsize != 0) hsiftdn(1); } void process_data() { int snum,i,s,d; snum = 1<