Ejemplo n.º 1
0
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;
}