Олимпиадный тренинг

Задача . D. Разделение рёбер


Вам дан связный, неориентированный и невзвешенный граф с \(n\) вершинами и \(m\) рёбрами. Обратите внимание на ограничение на количество рёбер: \(m \le n + 2\).

Давайте скажем, что мы красим некоторые рёбра в красный и оставшиеся рёбра в синий. Теперь рассмотрим только красные рёбра и посчитаем количество компонент связности в графе. Пусть это значение равно \(c_1\). Аналогично, рассмотрим только синие рёбра и посчитаем количество компонент связности в графе. Пусть это значение равно \(c_2\).

Найдите распределение цветов по рёбрам такое, что величина \(c_1+c_2\) минимальна.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(n-1 \leq m \leq \min{\left(n+2,\frac{n \cdot (n-1)}{2}\right)}\)) — количество вершин и рёбер в графе соответственно.

Затем следуют \(m\) строк. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n\), \(u_i \ne v_i\)) обозначающая, что \(i\)-е ребро соединяет вершины \(u_i\) и \(v_i\). Гарантируется, что в графе нет петель и кратных рёбер. Также гарантируется, что граф связен.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\). Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку длины \(m\). \(i\)-й символ строки должен быть 1, если \(i\)-е ребро должно иметь красный цвет, и 0, если оно должно иметь синий цвет. Если существует несколько способов распределить цвета, чтобы получить минимальную величину, вы можете вывести любой.

Примечание
  • Граф в первом наборе входных данных следующий:

    \(c_1 + c_2 = 1 + 2 = 3\)

  • Граф во втором наборе входных данных следующий:

    \(c_1 + c_2 = 2 + 2 = 4\)


Примеры
Входные данныеВыходные данные
1 4
5 7
1 2
2 3
3 4
4 5
5 1
1 3
3 5
4 4
1 2
2 3
1 4
3 4
6 7
1 2
1 3
3 4
4 5
1 4
5 6
6 2
2 1
1 2
0111010
1001
0001111
0

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w644
Комментарий учителя