
Ishnkelv
6 год назад
Пожалуйста посчитайте решить на С++Есть 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:331 22 31 321 2Sample Output 1:1 2Sample Input 2:431 21 44 213Sample Output 2:2
ОТВЕТЫ

Весела
Oct 24, 2020
Выкладываю две версии кодряры: сама кодряра, рабочая и прекрасная, и кодяра-алго, для пущего понимания работы кодяры.
Использован алгоритм раскраски вершин графа.
Если будет что непонятно, пишите.
Использован алгоритм раскраски вершин графа.
Если будет что непонятно, пишите.
- да,в условии было что 10^5 значений
512