2018-team4-modules-求字典序最小解

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
int check(int u) {
    if (mark[inv(u)]) return 0;
    if (mark[u]) return 1;
    mark[u] = 1;
    S[++tp] = u;
    for (int i=0;i<(int)E[u].size();i++)
        if (!check(E[u][i])) return 0;
    return 1;
}

void solve() {
    flag = 1;
    for (int i=1;i<=2*n;i+=2)
        if (!mark[i] && !mark[i+1]) {
            tp = 0;
            if (!check(i)) {
                while (tp) mark[ S[tp--] ] = 0;
                if (!check(i+1)) {flag = 0; return ;}
            }
        }
    return ;
}
}}}
int check(int u) {
    if (mark[inv(u)]) return 0;
    if (mark[u]) return 1;
    mark[u] = 1;
    S[++tp] = u;
    for (int i=0;i<(int)E[u].size();i++)
        if (!check(E[u][i])) return 0;
    return 1;
}
void solve() {
    flag = 1;
    for (int i=1;i<=2*n;i+=2)
        if (!mark[i] && !mark[i+1]) {
            tp = 0;
            if (!check(i)) {
                while (tp) mark[ S[tp--] ] = 0;
                if (!check(i+1)) {flag = 0; return ;}
            }
        }
    return ;
}