Language: C++

#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#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];
            if (ga != gb)
            {
                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++)
            {
                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;
 
                vector<int> vRD = g2iRoad[i2gRoad[i]];
                vector<int> vRW = g2iRailway[i2gRailway[i]];

                for (auto itrD = vRD.begin(); itrD != vRD.end(); itrD++)
                {
                    for (auto itrW = vRW.begin(); itrW != vRW.end(); itrW++)
                    {
                        if (*itrD == *itrW) 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 member function 'void Program::Solver::Solve()':
a.cc:97:54: error: 'cnt' cannot be used as a function
   97 |                 cout << ((i != 0) ? blk : nll) << cnt();
      |                                                   ~~~^~