社区讨论

没过样例,求debug

P9869[NOIP2023] 三值逻辑参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lq8xhhim
此快照首次捕获于
2023/12/17 11:29
2 年前
此快照最后确认于
2023/12/17 11:31
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int c, t, n, m, T = 114514, F = -114514, U, sum;
int d[100010];
unordered_map<int, int>fa;
int get(int a) {
    if(fa[a] == a)
        return a;
    else {
        fa[a] = get(fa[a]);
        return fa[a];
    }
}
void merge(int a, int b) {
    fa[get(b)] = get(a);
}
void check(int a) {
    if (get(a) == get(-a) || get(a) == U)
        sum++;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> c >> t;
    while (t--) {
        fa.clear();
        sum = 0;
        cin >> n >> m;
        for(int i = 1; i <= n; ++i) {
            fa[i] = d[i] = i;
            fa[-i] = -i;
        }
        for (int i = 1; i <= m; ++i) {
            char o;
            int x, y;
            cin >> o;
            if (o == 'T') {
                cin >> x;
                d[x] = T;
            }
            if (o == 'F') {
                cin >> x;
                d[x] = F;
            }
            if (o == 'U') {
                cin >> x;
                d[x] = U;
            }
            if (o == '+') {
                cin >> x >> y;
                d[x] = d[y];
            }
            if (o == '-') {
                cin >> x >> y;
                d[x] = -d[y];
            }
        }
        for (int i = 1; i <= n; ++i)
            merge(i, d[i]);
        for (int i = 1; i <= n; ++i)
            check(i);
        cout << sum << "\n";
    }
}

回复

0 条回复,欢迎继续交流。

正在加载回复...