Language: C++

#include <bits/stdc++.h>
#define REP(i, n) for(ll i = 0; i < (ll)n; i++)
#define FOR(i, a, b) for(ll i = (a); i < (ll)b; i++)
#define ALL(obj) (obj).begin(), (obj).end()
#define INF 1000000000000000
using namespace std;
typedef long long ll;
typedef double db;
typedef string str;
typedef pair<ll, ll> p;
constexpr int MOD = 1000000007;
template <class T> inline bool chmin(T &a, T b) {
    if(a > b) {
        a = b;
        return true;
    }
    return false;
}
template <class T> inline bool chmax(T &a, T b) {
    if(a < b) {
        a = b;
        return true;
    }
    return false;
}

class UnionFind {
  public:
    //親の番号を格納する．親だった場合は-(その集合のサイズ)
    vector<int> Parent;
    //作るときはParentの値をすべて-1にする
    //こうするとすべてバラバラになる
    UnionFind(int N) { Parent = vector<int>(N, -1); }
    // Aがどのグループに所属しているか
    int root(int A) {
        if(Parent[A] < 0)
            return A;
        return Parent[A] = root(Parent[A]);
    }
    //自分のいるグループの頂点数を調べる
    int size(int A) {
        return -Parent[root(A)]; //親を取って行きたい
    }

    // AとBをくっつける
    bool connect(int A, int B) {
        // AとBを直接つなぐのではなく，root(A)にroot(B)をくっつける
        A = root(A);
        B = root(B);
        if(A == B) {
            //すでにくっついているからくっつけない
            return false;
        }

        //大きい方(A)に小さい方(B)をくっつけたい
        //大小が逆だったらひっくり返しちゃう
        if(size(A) < size(B))
            swap(A, B);

        // Aのサイズを更新する
        Parent[A] += Parent[B];
        // Bの親をAに変更する
        Parent[B] = A;
        return true;
    }
};

int main() {
    long long N, K, L;
    cin >> N >> K >> L;
    vector<long long> p(K), q(K);
    vector<long long> s(L), r(L);
    REP(i, K) cin >> p[i] >> q[i];
    set<pair<long long, long long>> road;
    REP(i, K) {
        if(p[i] < q[i])
            road.insert(make_pair(p[i], q[i]));
        else
            road.insert(make_pair(q[i], p[i]));
    }
    REP(i, L) cin >> r[i] >> s[i];
    set<pair<long long, long long>> rail;
    REP(i, L) {
        if(r[i] < s[i]) {
            rail.insert(make_pair(r[i], s[i]));
        } else {
            rail.insert(make_pair(s[i], r[i]));
        }
    }
    UnionFind city(N);
    for(auto ite = road.begin(); ite < road.end(); ite++) {
        if(rail.find(*ite) != rail.end()) {
            city.connect(*ite.first, *ite.second);
        }
    }
    REP(i, N) {
        if(city.Parent[i] < -1) {
            cout << -city.Parent[i];
        }
    }
    cout << endl;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:91:38: error: no match for 'operator<' (operand types are 'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' and 'std::set<std::pair<long long int, long long int> >::iterator' {aka 'std::_Rb_tree<std::pair<long long int, long long int>, std::pair<long long int, long long int>, std::_Identity<std::pair<long long int, long long int> >, std::less<std::pair<long long int, long long int> >, std::allocator<std::pair<long long int, long long int> > >::const_iterator'})
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                  ~~~ ^ ~~~~~~~~~~
      |                                  |             |
      |                                  |             _Rb_tree_const_iterator<[...]>
      |                                  _Rb_tree_const_iterator<[...]>
In file included from /usr/include/c++/14/regex:68,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:181,
                 from a.cc:1:
/usr/include/c++/14/bits/regex.h:1143:5: note: candidate: 'template<class _BiIter> bool std::__cxx11::operator<(const sub_match<_BiIter>&, const sub_match<_BiIter>&)'
 1143 |     operator<(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/14/bits/regex.h:1143:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/regex.h:1224:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator<(__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&, const sub_match<_BiIter>&)'
 1224 |     operator<(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/regex.h:1224:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/regex.h:1317:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator<(const sub_match<_BiIter>&, __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&)'
 1317 |     operator<(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/regex.h:1317:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/regex.h:1391:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<(const typename std::iterator_traits<_Iter>::value_type*, const sub_match<_BiIter>&)'
 1391 |     operator<(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/regex.h:1391:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::set<std::pair<long long int, long long int> >::iterator' {aka 'std::_Rb_tree<std::pair<long long int, long long int>, std::pair<long long int, long long int>, std::_Identity<std::pair<long long int, long long int> >, std::less<std::pair<long long int, long long int> >, std::allocator<std::pair<long long int, long long int> > >::const_iterator'} is not derived from 'const std::__cxx11::sub_match<_BiIter>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/regex.h:1485:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<(const sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type*)'
 1485 |     operator<(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/regex.h:1485:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/regex.h:1560:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<(const typename std::iterator_traits<_Iter>::value_type&, const sub_match<_BiIter>&)'
 1560 |     operator<(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/regex.h:1560:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::set<std::pair<long long int, long long int> >::iterator' {aka 'std::_Rb_tree<std::pair<long long int, long long int>, std::pair<long long int, long long int>, std::_Identity<std::pair<long long int, long long int> >, std::less<std::pair<long long int, long long int> >, std::allocator<std::pair<long long int, long long int> > >::const_iterator'} is not derived from 'const std::__cxx11::sub_match<_BiIter>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/regex.h:1660:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<(const sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type&)'
 1660 |     operator<(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/regex.h:1660:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
In file included from /usr/include/c++/14/bits/stl_algobase.h:64,
                 from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51:
/usr/include/c++/14/bits/stl_pair.h:1045:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator<(const pair<_T1, _T2>&, const pair<_T1, _T2>&)'
 1045 |     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_pair.h:1045:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::pair<_T1, _T2>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
In file included from /usr/include/c++/14/bits/stl_algobase.h:67:
/usr/include/c++/14/bits/stl_iterator.h:448:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator<(const reverse_iterator<_Iterator>&, const reverse_iterator<_Iterator>&)'
  448 |     operator<(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:448:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::reverse_iterator<_Iterator>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/stl_iterator.h:493:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator<(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
  493 |     operator<(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:493:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::reverse_iterator<_Iterator>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/stl_iterator.h:1694:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator<(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
 1694 |     operator<(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1694:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::move_iterator<_IteratorL>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
/usr/include/c++/14/bits/stl_iterator.h:1760:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator<(const move_iterator<_IteratorL>&, const move_iterator<_IteratorL>&)'
 1760 |     operator<(const move_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1760:5: note:   template argument deduction/substitution failed:
a.cc:91:49: note:   'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >' is not derived from 'const std::move_iterator<_IteratorL>'
   91 |     for(auto ite = road.begin(); ite < road.end(); ite++) {
      |                                                 ^
In file included from /usr/include/c++/14/bits/basic_string.h:47,
                 from /usr/include/c++/14/string:54,
                 from /usr/include/c++/14/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:52:
/usr/include/c++/14/string_view:673:5: note: candidate: 'template<class _CharT, class