Решить на с++ есть 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
Использован алгоритм раскраски вершин графа.
Если будет что непонятно, пишите.