ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#432 | #104. 「NOIP2023」双序列拓展 | Pigsyy | 100 | 743ms | 12680kb | C++23 | 1.6kb | 2025-04-24 12:48:39 | 2025-04-24 12:48:40 |
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int c, t, n, m, x, y, ok;
vector<pair<int, int>> G[N];
int eq[N], flip[N], col[N], vis[N];
inline int dfs(int x) {
vis[x] = 1;
int siz = 1;
for (auto &edge : G[x]) {
const int y = edge.first;
const int w = edge.second;
if (vis[y]) {
ok &= (col[y] == (col[x] ^ w));
} else {
col[y] = col[x] ^ w, siz += dfs(y);
}
}
return siz;
}
inline void solve(void) {
char opt;
cin >> n >> m, n++;
for (int i = 0; i <= n; i++) {
G[i].clear(), eq[i] = i;
flip[i] = col[i] = vis[i] = 0;
}
for (int i = 1; i <= m; i++) {
cin >> opt >> x;
if (opt == 'T')
eq[x] = n, flip[x] = 0;
else if (opt == 'F')
eq[x] = n, flip[x] = 1;
else if (opt == 'U')
eq[x] = 0, flip[x] = 0;
else
cin >> y, eq[x] = eq[y], flip[x] = (opt == '-') ^ flip[y];
}
for (int i = 0; i <= n; i++) {
G[i].push_back({eq[i], flip[i]});
G[eq[i]].push_back({i, flip[i]});
}
int ans = dfs(0);
for (int i = 1, siz; i <= n; i++) {
if (vis[i])
continue;
ok = 1, siz = dfs(i);
if (!ok)
ans += siz;
}
cout << ans - 1 << '\n';
}
inline void optimizeIO(void) {
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
}
int main(int argc, char const *argv[]) {
optimizeIO(), cin >> c >> t;
while (t--)
solve();
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 1ms
memory: 3448kb
input:
1 6 10 10 F 8 + 8 2 - 6 6 - 5 3 + 2 10 U 2 + 4 5 - 1 5 + 3 4 U 3 10 10 - 10 9 - 9 7 + 7 6 + 6 5 + 5 ...
output:
7 6 0 4 9 10
result:
ok 6 tokens
Test #2:
score: 10
Accepted
time: 3ms
memory: 3636kb
input:
2 6 10 10 + 6 5 + 5 1 U 1 + 7 8 + 8 10 U 4 + 10 4 + 9 9 - 2 2 U 3 10 10 - 10 9 - 9 3 F 7 F 7 F 10 - ...
output:
9 0 10 0 3 5
result:
ok 6 tokens
Test #3:
score: 10
Accepted
time: 2ms
memory: 3456kb
input:
3 6 976 1000 F 500 F 508 T 616 F 455 F 935 U 972 T 665 T 633 F 194 F 168 T 924 U 507 T 394 T 142 T 6...
output:
170 435 107 0 106 2
result:
ok 6 tokens
Test #4:
score: 10
Accepted
time: 126ms
memory: 10908kb
input:
4 6 99931 100000 F 74334 T 16424 T 93424 F 48150 F 52360 F 51624 F 90834 T 82926 F 45868 F 91856 F 4...
output:
0 17507 2 7317 20723 7233
result:
ok 6 tokens
Test #5:
score: 10
Accepted
time: 3ms
memory: 3676kb
input:
5 6 983 1000 + 680 248 + 769 267 U 53 + 525 754 + 517 437 + 327 851 U 670 + 311 199 U 67 + 494 99 + ...
output:
339 0 247 0 891 15
result:
ok 6 tokens
Test #6:
score: 10
Accepted
time: 184ms
memory: 12308kb
input:
6 6 100000 100000 + 99995 99994 + 99994 99990 + 99990 99985 + 99985 99981 + 99981 99979 + 99979 9997...
output:
0 173 0 22606 29974 89864
result:
ok 6 tokens
Test #7:
score: 10
Accepted
time: 7ms
memory: 3740kb
input:
7 6 987 1000 + 987 968 + 982 954 - 980 979 - 979 978 + 978 944 - 973 962 + 968 952 + 964 948 + 962 9...
output:
404 432 339 0 411 60
result:
ok 6 tokens
Test #8:
score: 10
Accepted
time: 218ms
memory: 12680kb
input:
8 6 100000 100000 - 100000 99996 + 99996 99995 + 99995 99994 - 99994 99993 + 99993 99991 + 99991 999...
output:
41341 52418 6652 34468 0 44271
result:
ok 6 tokens
Test #9:
score: 10
Accepted
time: 7ms
memory: 3560kb
input:
9 6 974 1000 - 637 217 F 123 + 415 909 U 719 F 518 - 722 850 - 132 117 + 43 13 T 27 - 228 790 U 283 ...
output:
123 432 175 652 91 468
result:
ok 6 tokens
Test #10:
score: 10
Accepted
time: 192ms
memory: 12304kb
input:
10 6 100000 100000 - 99994 99993 + 99993 99990 - 99990 99989 - 99989 99988 - 99988 99980 - 99980 999...
output:
0 10910 61794 78897 12891 12029
result:
ok 6 tokens