社区讨论
没过样例,求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 条回复,欢迎继续交流。
正在加载回复...