1 条题解

  • 0
    @ 2022-12-18 17:32:32
    #include <bits/stdc++.h>
    using namespace std;
    int n, m;       // 人数、操作数量
    int fa[21234];  // fa[i]: 记录 i 的父节点
    int cnt[21234]; // cnt[i]: 记录家族人数(只有是祖宗节点时才有效)
    // 返回x的祖宗节点
    int findFa(int x)
    {
        if (x == fa[x])
            return x;
        return findFa(fa[x]);
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n >> m;
        // 初始每个人自己是自己的祖宗
        for (int i = 1; i <= n; i++)
            fa[i] = i, cnt[i] = 1;
        // 处理 m 次操作
        while (m--)
        {
            char c;
            int u, v;
            cin >> c;
            if (c == 'M')
            {
                cin >> u >> v;
                // 找到两个人的祖宗节点
                int faU = findFa(u);
                int faV = findFa(v);
                if (faU != faV)
                {
                    if (cnt[faV] < cnt[faU])
                    {
                        fa[faV] = faU;
                        cnt[faU] += cnt[faV];
                    }
                    else
                    {
                        fa[faU] = faV;
                        cnt[faV] += cnt[faU];
                    }
                }
            }
            else
            {
                int u;
                cin >> u;
                // 找到两个人的祖宗节点
                int faU = findFa(u);
                cout << cnt[faU] << "\n";
            }
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    618
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    (无)
    递交数
    39
    已通过
    23
    上传者