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 ;
}