Language: C++

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
namespace Program
{
    using namespace std;
    class Solver
    {
    private:
        const char *blk = " ";
        const char *nll = "\0";

        int N, K, L;
        int p, q;
        int r, s;

        // i2g[i] := アイテム i の所属するグループの番号
        // g2i[g] := グループ g に所属するアイテムたち
        vector<int> i2gRoad;
        vector< vector<int> > g2iRoad;
        vector<int> i2gRailway;
        vector< vector<int> > g2iRailway;

    public:
        // アイテム ia の所属するグループとアイテム ib のis_same_group所属するグループを
        // 1 つにする
        // (ia と ib は違うグループに所属するものとする)
        void merge(int ia, int ib, vector<int> &i2g, vector< vector<int> > &g2i) {
            // ia の所属するグループが
            // ib の所属するグループより小さくならないようにする
            if (g2i[i2g[ia]].size() < g2i[i2g[ib]].size()) {
                swap(ia, ib);
            }

            int ga = i2g[ia], gb = i2g[ib];
            for (int j : g2i[gb]) i2g[j] = ga;
            g2i[ga].insert(g2i[ga].end(), g2i[gb].begin(), g2i[gb].end());
            g2i[gb].clear();
        }

        // アイテム ia とアイテム ib は同じグループに所属しているか ?
        bool is_same_group(int ia, int ib, vector<int> &i2g) {
            return i2g[ia] == i2g[ib];
        }

        Solver()
        {
            cin.tie(0);
            ios::sync_with_stdio(false);

            cin >> N >> K >> L;

            g2iRoad.resize(N);
            g2iRailway.resize(N);
            for (int i = 0; i < N; i++)
            {
                //g2iRoad[i].resize(N);
                //g2iRailway[i].resize(N);

                i2gRoad.push_back(i);
                g2iRoad[i].push_back(i);

                i2gRailway.push_back(i);
                g2iRailway[i].push_back(i);
            }

            for (int i = 0; i < K; i++)
            {
                cin >> p >> q;
                merge(p - 1, q - 1, i2gRoad, g2iRoad);
            }

            for (int i = 0; i < L; i++)
            {
                cin >> r >> s;
                merge(r - 1, s - 1, i2gRailway, g2iRailway);
            }
        }
        void Solve()
        {
            for (int i = 0; i < N; i++)
            {
                int cnt = 0;
                for (int j = 0; j < N; j++)
                {
                    cnt =
                        (is_same_group(i, j, i2gRoad)
                            && is_same_group(i, j, i2gRailway))
                        ? cnt + 1
                        : cnt;
                }
                cout << ((i != 0) ? blk : nll) << cnt;
            }
            cout << endl;
        }
    };
}

int main()
{
    // メモリリーク検出
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF
        | _CRTDBG_DELAY_FREE_MEM_DF
        | _CRTDBG_CHECK_ALWAYS_DF
        | _CRTDBG_LEAK_CHECK_DF);

    // メンバ関数ポインタ取得
    void (Program::Solver::*pSolve)() = &Program::Solver::Solve;

    // コンストラクタ呼び出し
    Program::Solver obj;

    // .*演算子でアクセス
    (obj.*pSolve)();
    return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:102:20: error: '_CRTDBG_ALLOC_MEM_DF' was not declared in this scope
  102 |     _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF
      |                    ^~~~~~~~~~~~~~~~~~~~
a.cc:103:11: error: '_CRTDBG_DELAY_FREE_MEM_DF' was not declared in this scope
  103 |         | _CRTDBG_DELAY_FREE_MEM_DF
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:104:11: error: '_CRTDBG_CHECK_ALWAYS_DF' was not declared in this scope
  104 |         | _CRTDBG_CHECK_ALWAYS_DF
      |           ^~~~~~~~~~~~~~~~~~~~~~~
a.cc:105:11: error: '_CRTDBG_LEAK_CHECK_DF' was not declared in this scope
  105 |         | _CRTDBG_LEAK_CHECK_DF);
      |           ^~~~~~~~~~~~~~~~~~~~~
a.cc:102:5: error: '_CrtSetDbgFlag' was not declared in this scope
  102 |     _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF
      |     ^~~~~~~~~~~~~~