!-- Loading 底层遮罩 -->

P1892 团伙

感谢所有AC

 

传送门

思路

      并查集与反集(敌人的敌人就是朋友,朋友的朋友也是朋友)(反集还需要加深理解)

代码

#include<iostream>
using namespace std;
int n, m, a, b, ans, fa[2100];
char ch;
int find(int x) {
    if (fa[x] == x)return x;
    return fa[x] = find(fa[x]);
}
int main(void) {
    cin >> n >> m;
    for (int i = 1; i <= n << 1; i++) {
        fa[i] = i;
    }
    for (int i = 1; i <= m; i++) {
        cin >> ch >> a >> b;
        if (ch == 'F') {
            fa[find(a)] = find(b);
        }
        else {
            fa[find(a + n)] = find(b);
            fa[find(b + n)] = find(a);
        }
    }
    for (int i = 1; i <= n; i++) {
        if (fa[i] == i)ans++;
    }
    cout << ans;
    return 0;
}
 

 

posted @ 2022-03-30 22:03  Thinker-X  阅读(27)  评论(0)    收藏  举报