为什么去掉一个break就WA了
查看原帖
为什么去掉一个break就WA了
369207
Watware楼主2023/11/16 12:28

代码

#include <bits/stdc++.h>
using namespace std;

constexpr int M = 2010;

bitset<M> f[M];
int T, n, m, x[M];
vector<int> e[M];

inline void solve() {
    assert(scanf("%d%d", &n, &m));
    for (int i = 0; i < n; i++) x[i] = 0, f[i].reset(), e[i].clear();
    for (int i = 1, u, v; i <= m; i++) assert(scanf("%d%d", &u, &v)), u--, v--, e[u].push_back(v), e[v].push_back(u);
    bool flag = true;
    for (int i = 0; i < n; i++) {
        for (int j : e[i]) f[i][j] = 1;
        if (e[i].size() & 1) f[i][i] = f[i][n] = 1, flag = false;
    }
    if (flag) {
        printf("1\n");
        for (int i = 1; i <= n; i++) printf("%d ", 1);
        printf("\n");
        return;
    }
    for (int i = 0; i < n; i++) {
        int p = i;
        for (int j = i; j < n; j++)
            if (f[j][i]) {
                p = j;
                break;
            }
        swap(f[i], f[p]);
        for (int j = i + 1; j < n; j++)
            if (f[j][i]) f[j] ^= f[i];
    }
    for (int i = n - 1; i >= 0; i--) {
        x[i] = f[i][n];
        for (int j = i + 1; j < n; j++)
            if (f[i][j]) x[i] ^= x[j];
    }
    printf("2\n");
    for (int i = 0; i < n; i++) printf("%d ", x[i] + 1);
}

int main() {
    assert(scanf("%d", &T));
    while (T--) solve();
}
            if (f[j][i]) {
                p = j;
                break;
            }

这里的 break 删掉就 WA 了,不知道为什么

2023/11/16 12:28
加载中...