int fun(){ int k; bool flag; for(k=1; k<=num; k++){ sum[k].undef = true; } sum[0].l = 0; sum[0].r = 0; sum[0].undef = false; Ran one; flag = true; while( flag ){ flag = false; for(int i=0; i<cnt; i++){ if(sum[tree[i].s].undef && sum[tree[i].n].undef){ continue; } if(sum[tree[i].s].undef){ flag = true; one = sum[tree[i].n]; if(tree[i].cmp == 1){ one.less(-tree[i].v); } else { one.great(-tree[i].v); } sum[tree[i].s] = one; } else if(sum[tree[i].n].undef){ flag = true; one = sum[tree[i].s]; if(tree[i].cmp ==1){ one.great(tree[i].v); } else { one.less(tree[i].v); } sum[tree[i].n] = one; } else { // detect conflicts. one = sum[tree[i].s]; if(tree[i].cmp ==1){ one.great(tree[i].v); } else { one.less(tree[i].v); } one.inter(sum[tree[i].n]); if(one.r < one.l) return 0; if(sum[tree[i].n] != one){ sum[tree[i].n] = one; flag = true; } one = sum[tree[i].n]; if(tree[i].cmp == 1){ one.less(-tree[i].v); } else { one.great(-tree[i].v); } one.inter(sum[tree[i].s]); if(one != sum[tree[i].s]){ sum[tree[i].s] = one; flag = true; } } } if(flag == false){ for(k=1;k<=num;k++){ if(sum[k].undef){ flag = true; sum[k].undef = false; sum[k].l = sum[k].r = 0; break; } } } } return 1; }