max0120842

Пользователь

Регистрация: 21.09.2016

Сообщения: 211

Рейтинг: 31

max0120842

Регистрация: 21.09.2016

Сообщения: 211

Рейтинг: 31

Парни, хелп. Уже неделю не могу понять как решить эту задачку.

http://matol.kz/comments/4113/show

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8641

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8641

Для заданного графа выделяешь компоненты сильной связности (это называется конденсация). Для каждой компоненты ведешь подсчет количества вершин с "высоким статусом". При подсчете путей для заданной дороги смотришь, дорога лежит между компонентами или нет. Если нет, т. е. дорога находится в компоненте, то ответ сразу ноль будет. Если между, то выбираешь компоненты, которые находятся по разные стороны от дороги, слева и справа, считаешь суммарное число городов с высоким статусом с этих компонент, произведение полученных двух чисел будет ответом.

По идее, самое сложное - провести конденсацию графа, но в интернете должно быть много примеров этого алгоритма.

UPD. Так как граф может быть не связным, нужно еще искать нужный подграф сначала

max0120842

Пользователь

Регистрация: 21.09.2016

Сообщения: 211

Рейтинг: 31

max0120842

Регистрация: 21.09.2016

Сообщения: 211

Рейтинг: 31

Moon-chan сказал(а):

Для заданного графа выделяешь компоненты сильной связности (это называется конденсация). Для каждой компоненты ведешь подсчет количества вершин с "высоким статусом". При подсчете путей для заданной дороги смотришь, дорога лежит между компонентами или нет. Если нет, т. е. дорога находится в компоненте, то ответ сразу ноль будет. Если между, то выбираешь компоненты, которые находятся по разные стороны от дороги, слева и справа, считаешь суммарное число городов с высоким статусом с этих компонент, произведение полученных двух чисел будет ответом.

По идее, самое сложное - провести конденсацию графа, но в интернете должно быть много примеров этого алгоритма.

Нажмите, чтобы раскрыть...

Я уже понял, что задача решается через графы, но я с ними знаком только в теории, знаю алгоритм обхода в глубину (dfs), но как применить это не понимаю

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8641

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8641

max0120842 сказал(а):

Я уже понял, что задача решается через графы, но я с ними знаком только в теории, знаю алгоритм обхода в глубину (dfs), но как применить это не понимаю

Нажмите, чтобы раскрыть...

Тут поиск компонент сильной связности проводить нужно

max0120842

Пользователь

Регистрация: 21.09.2016

Сообщения: 211

Рейтинг: 31

max0120842

Регистрация: 21.09.2016

Сообщения: 211

Рейтинг: 31

Moon-chan сказал(а):

Тут поиск компонент сильной связности проводить нужно

Нажмите, чтобы раскрыть...

В разве компоненты сильной связности могут существовать с неориентированном графе? у нас по заданию ведь он неориентированный

 

 

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8641

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8641

max0120842 сказал(а):

В разве компоненты сильной связности могут существовать с неориентированном графе? у нас по заданию ведь он неориентированный

Нажмите, чтобы раскрыть...

Да. Неориентированный граф вообще можно считать частным случаем ориентированного

aQuere

Пользователь

Регистрация: 19.07.2016

Сообщения: 4729

Рейтинг: 1121

Нарушения: 20

aQuere

Регистрация: 19.07.2016

Сообщения: 4729

Рейтинг: 1121

Нарушения: 20

Moon-chan сказал(а):

Да. Неориентированный граф вообще можно считать частным случаем ориентированного

Нажмите, чтобы раскрыть...

Ты сверхразум?