Описание карты
в давние времена карт почти не было, поэтому о возможности проехать из одного города в другой можно было узнать только из описаний других путешественников.
всего было известно о существовании n городов, занумерованных числами от 1 до n. сначала о существовании путей о дорогах между не было известно ничего, затем стали приходить отчёты от путшественников о возможности или невозможности добраться от одного города до другого, а также запросы о возможности или невозможности добраться от одного города до другого. все дороги двусторонние, то есть если от одного города возможно (или невозможно) добраться до второго, то и от второго возможно (или невозможно) добраться до первого.
ученым, исследующим дорожную сеть давних времен, ответить на запросы. запросы следует обрабатывать в том порядке, как они задавались, используя только имеющуюся на момент запроса информацию. дорожная сеть в процессе работы не менялась, отчёты путешественников не содержат противоречий.
формат входных данных
в первой строке входных данных задаётся два числа: n и k (1 ≤ n, k ≤ 1) — количество городов и запросов.
в каждой из следующих k строк записан запрос одного из трех типов:
+ i j — существует путь по дорогам из города i в город j
- i j — не существует пути по дорогам из города i в город j
? i j — определить, существует ли путь по дорогам из города i в город j.
формат результата
на каждый запрос о существовании пути по дорогам выведите одну из трёх строк:
+ — если путь существует
- — если пути не существует
? — если по имеющимся на момент запроса отчётам нельзя точно определить существует или не существует путь между
примеры
входные данные
3 4
+ 1 2
? 1 3
+ 3 2
? 1 3
результат работы
?
+
входные данные
4 5
+ 1 2
+ 3 4
- 1 4
? 2 4
? 1 3
результат работы
-
-
#include <iostream>
class myarr
{
public:
typedef int* i_ptr;
myarr(const int &_size) : size(_size)
{
arr = new int[size];
}
myarr(const myarr &_arr)
{
size = _arr.get_size();
arr = new int[size];
for (size_t i = 0; i < size; ++i)
{
arr[i] = _arr.arr[i];
}
}
~myarr()
{
delete[] arr;
}
constexpr int get_size() const noexcept
{
return size;
}
private:
i_ptr arr;
int size;
};
int main()
{
myarr a(10);
myarr b(a);
}
#include <iostream>
#include <array>
#include <random>
#include <algorithm>
int main()
{
std::mt19937 gen{ std::random_device()() };
std::uniform_int_distribution<> uid(0, 20);
std::array<int, 10> a;
std::generate(a.begin(), a.end(), [&uid, &gen]()
{ return uid(gen); });
std::cout << "Our array of numbers: ";
std::copy(std::begin(a), std::end(a),
std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl << "Count of numbers multiple of 5: ";
std::cout <<
std::count_if(a.cbegin(), a.cend(), [&](const int &n)
{ return !(n % 5); });
}