Помогите решить на С++
Есть n городов. Они соединяются с помощью m дорог. Дорога соединяет два города между собой.
Города A и B находятся в одной сети городов, если машина от сервера A может по рабочим дорогам доехать до города B, возможно проходя при этом через промежуточные города. Если город может соединиться только с собой, то считается, что он сам по себе представляет сеть городов.
В строительной компании появились нарушители, которые начали ломать дороги. Пока ваш напарник поехал за правительством, вам поручили посчитать полученный ущерб компании. Вам нужно ответить, сколько всего сетей городов в компании возникало после выведения каждой дороги из строя.
Формат входных данных
В первой строке вводится целое число n (2≤n≤3⋅10^5) - количество городов в компании.
Во второй строке вводится целое число m (1≤m≤3⋅10^5) - количество дорог.
В следующих m строках вводятся пары различных чисел a,b (1≤a,b≤n) номера городов, которые соединяет i-ая дорога.
В следующей строке вводится число q (1≤q≤m) количество сломанных дорог.
В следующей строке вводится q различных чисел – номера сломанных дорог. Все номера различны и идут в хронологическом порядке.
Формат выходных данных
Выведите q чисел, количество различных сетей городов после выведения из строя следующего города.
Примечание
Первый пример: после удаления первой дороги все города все еще находятся в одной сети городов. После удаления второй дороги, сеть городов разбивается на две части: города 1,3 и город 2.
Sample Input 1:
3
3
1 2
2 3
1 3
2
1 2
Sample Output 1:
1 2
Sample Input 2:
4
3
1 2
1 4
4 2
1
3
Sample Output 2:
2
Answers & Comments
Использован алгоритм раскраски вершин графа.
Если будет что непонятно, пишите.