Помогите решить ** С++ Есть n городов. Они соединяются с помощью m дорог. Дорога...

0 голосов
30 просмотров

Помогите решить на С++


Есть 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


Информатика (119 баллов) | 30 просмотров
0

Что значит "возникало после выведения каждой дороги из строя"?

0

Имеется в виду, "убрали эту дорогу - прибавилось 2 сети, убрали эту - ещё 1, эту - ещё 1". И так далее для каждой убранной дороги?

0

Код готов

0

Я выводил РАЗНИЦУ в количестве, а не само количество

0

Все, я прозрел

0

Если я правильно понял, то во втором примере ничего выводиться не должно

0

А во втором просто 2?

0

Почему в первом примере выводится сначала 1, а потом 2?

0

С выводом какая-то дичь

Дан 1 ответ
0 голосов
Правильный ответ

Выкладываю две версии кодряры: сама кодряра, рабочая и прекрасная, и кодяра-алго, для пущего понимания работы кодяры.

Использован алгоритм раскраски вершин графа.

Если будет что непонятно, пишите.

(6.9k баллов)
0

я сам про них не знал

0

я же говорю, это мои проблемы, больше половины задачи он прошел. этого мне хватит

0

эх, час потел...

0

3*10^5

0

да,в условии было что 10^5 значений

0

там много значений, чтоль?

0

как раз по этим х-кам и выбирается алгоритм и структура данных

0

)))))

0

это да

0

Конечно если лучше будет, я не против, но мне кажется это лишнее