Submission details
Task:Connect cities
Sender:aalto26bh_034
Submission time:2026-09-06 21:42:38 +0300
Language:C++ (C++23)
Status:COMPILE ERROR

Compiler report

In file included from /usr/include/c++/13/bits/hashtable.h:35,
                 from /usr/include/c++/13/bits/unordered_map.h:33,
                 from /usr/include/c++/13/unordered_map:41,
                 from input/code.cpp:6:
/usr/include/c++/13/bits/hashtable_policy.h: In instantiation of 'void std::__detail::_Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::_M_insert_range(_InputIterator, _InputIterator, const _NodeGetter&, std::true_type) [with _InputIterator = int; _NodeGetter = std::__detail::_AllocNode<std::allocator<std::__detail::_Hash_node<std::pair<const int, int>, false> > >; _Key = int; _Value = std::pair<const int, int>; _Alloc = std::allocator<std::pair<const int, int> >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<int>; _Hash = std::hash<int>; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy;...

Code

#include <string>
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>


using namespace std;

int main()
{
    int n_cities;
    int n_roads;
    cin >> n_cities >> n_roads;
    

    unordered_map<int, unordered_set<int>> city_map;
    unordered_map<int, int> seen_cities;     

    int road1, road2;

    for(int i = 0; i < n_roads; i++)
    {
        bool in = false;
        int temp_key;
        cin >> road1 >> road2;

        for(auto & [key, val] : city_map)
        {
            if(seen_cities.count(road1) && seen_cities.count(road2)) break;
            if(val.count(seen_cities[road1]))
            {
                temp_key = key;
                val.insert(road1);
                val.insert(road2);
                if(!in)
                {
                    in = true;
                    if(!(seen_cities.find(road1) != seen_cities.end() && seen_cities.find(road2) != seen_cities.end())) break;
                }
                else
                {
                    city_map[temp_key].merge(val);
                    city_map.erase(key);
                    break;
                }
            }
            else if(val.count(seen_cities[road2]))
            {
                temp_key = key;
                val.insert(road1);
                val.insert(road2);
                if(!in)
                {
                    in = true;
                    if(!(seen_cities.find(road1) != seen_cities.end() && seen_cities.find(road2) != seen_cities.end())) break;
                }
                else
                {
                    city_map[temp_key].merge(val);
                    city_map.erase(key);
                    break;
                }
            }
        }
        if(!in)
        {
            unordered_set<int> temp = {road1, road2};
            city_map[road1] = temp;
            temp_key = road1;
        }
        seen_cities.insert(road1, temp_key);
        seen_cities.insert(road2, temp_key);
    }
    for(int i = 1; i <= n_cities; i++)
    {
        if(!seen_cities.count(i))
        {
            city_map[i] = {i};
        }
    }
    printf("%ld\n", city_map.size() - 1);
    unordered_map<int, unordered_set<int>>::iterator it1;
    unordered_map<int, unordered_set<int>>::iterator it2 = city_map.begin();
    it2++;
    for(it1 = city_map.begin(); it2 != city_map.end(); ++it1, ++it2)
    {
        printf("%d %d\n", *(it1->second.begin()), *(it2->second.begin()));
    }

}