QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#660669 | #9449. New School Term | hhoppitree | WA | 1ms | 6004kb | C++17 | 1.8kb | 2024-10-20 12:36:36 | 2024-10-20 12:36:38 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 5005, M = 1e6 + 5;
const long long P = (long long)(1e18) + 3;
int n, m, fa[N], ox[M], oy[M], d[N], siz[N], id[N], S;
long long f[N << 1];
void insert(int x) {
x = abs(x);
if (!x) return;
S += x;
for (int i = x; i < N * 2; ++i) ((f[i] += f[i - x]) >= P) && (f[i] -= P);
}
void erase(int x) {
x = abs(x);
if (!x) return;
S -= x;
for (int i = N * 2 - 1; i >= x; --i) ((f[i] -= f[i - x]) < 0) && (f[i] += P);
}
void merge(int x, int y, int z = 1) {
while (fa[x] != x) z ^= id[x], x = fa[x];
while (fa[y] != y) z ^= id[y], y = fa[y];
if (x == y) return;
if (siz[x] > siz[y]) swap(x, y);
siz[y] += siz[x], fa[x] = y;
if (z) {
erase(d[x]), erase(d[y]), insert(d[y] - d[x]);
if (f[S >> 1]) id[x] = 1, d[y] = d[y] - d[x];
else erase(d[y] - d[x]), id[x] = 0, insert(d[y] = d[x] + d[y]);
} else {
erase(d[x]), erase(d[y]), insert(d[x] + d[y]);
if (f[S >> 1]) id[x] = 0, d[y] = d[x] + d[y];
else erase(d[x] + d[y]), id[x] = 1, insert(d[y] = d[y] - d[x]);
}
}
signed main() {
// freopen("grouping.in", "r", stdin);
// freopen("grouping.out", "w", stdout);
scanf("%d%d", &n, &m), n <<= 1;
iota(fa + 1, fa + n + 1, 1);
f[0] = 1;
for (int i = 1; i <= n; ++i) insert(siz[i] = d[i] = 1);
for (int i = 1; i <= m; ++i) scanf("%d%d", &ox[i], &oy[i]);
for (int i = m; i >= 1; --i) merge(ox[i], oy[i], 1);
for (int i = 2; i <= n; ++i) merge(i, 1, 0);
int ty = 0;
for (int i = 1; i <= n; ++i) {
int z = i, eq = 0;
while (fa[z] != z) eq ^= id[z], z = fa[z];
if (i == 1) ty = eq;
eq ^= ty;
putchar(eq + '0');
}
puts("");
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 5932kb
input:
2 4 1 3 2 4 1 4 1 2
output:
0101
result:
ok Output is valid. OK
Test #2:
score: 0
Accepted
time: 0ms
memory: 6004kb
input:
3 7 2 5 1 3 4 6 2 6 4 5 2 4 5 6
output:
001101
result:
ok Output is valid. OK
Test #3:
score: 0
Accepted
time: 0ms
memory: 3928kb
input:
1 0
output:
01
result:
ok Output is valid. OK
Test #4:
score: 0
Accepted
time: 1ms
memory: 5860kb
input:
1 1 1 2
output:
01
result:
ok Output is valid. OK
Test #5:
score: 0
Accepted
time: 1ms
memory: 5756kb
input:
2 3 2 4 3 4 1 2
output:
0110
result:
ok Output is valid. OK
Test #6:
score: 0
Accepted
time: 1ms
memory: 6004kb
input:
3 8 4 6 3 5 1 4 2 4 1 6 1 2 3 4 4 5
output:
010101
result:
ok Output is valid. OK
Test #7:
score: -100
Wrong Answer
time: 0ms
memory: 5856kb
input:
4 9 4 7 3 8 1 5 2 7 2 8 6 8 7 8 1 4 1 6
output:
01011110
result:
wrong answer The number of 0s must be equal to that of 1s.