Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#432#104. 「NOIP2023」双序列拓展Pigsyy100743ms12680kbC++231.6kb2025-04-24 12:48:392025-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