Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2014, 19:37   #1
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию Задача на графы : "Автобусы" с acmp.ru

Вечер добрый.
Прошу помощи при решении задачи с acmp.ru #134

Автобусы
(Время: 1 сек. Память: 16 Мб Сложность: 50%)
Между некоторыми деревнями края Власюки ходят автобусы. Поскольку пассажиропотоки здесь не очень большие, то автобусы ходят всего несколько раз в день.

Марии Ивановне требуется добраться из деревни d в деревню v как можно быстрее (считается, что в момент времени 0 она находится в деревне d).

Входные данные

Во входном файле INPUT.TXT записано число N - общее число деревень (1 <= N <= 100), номера деревень d и v, затем количество автобусных рейсов R (0 <= R <= 10000). Затем идут описания автобусных рейсов. Каждый рейс задается номером деревни отправления, временем отправления, деревней назначения и временем прибытия (все времена - целые от 0 до 10000). Если в момент t пассажир приезжает в деревню, то уехать из нее он может в любой момент времени, начиная с t.

Выходные данные

В выходной файл OUTPUT.TXT вывести минимальное время, когда Мария Ивановна может оказаться в деревне v. Если она не сможет с помощью указанных автобусных рейсов добраться из d в v, вывести -1.

Пример

INPUT.TXT
3
1 3
4
1 0 2 5
1 1 2 3
2 3 3 5
1 1 3 10


OUTPUT.TXT
5


И как же решать это чудо?
(Желательно дать идею.. накодить я сам смогу(наверное))

Мои мысли..
Задачу можно решить перебором.. Но это будет иметь огроменную сложность..
В обсуждениях говорят о Дейкстре и Форде-Белмане.. Но куда их сюда засунуть я не знаю..
Посему прошу помощи.. Заранее спасибо..

Заранее спасибо!

Последний раз редактировалось Simply-Art; 18.07.2014 в 09:21. Причина: поправил input файл
Poma][a вне форума Ответить с цитированием
Старый 18.07.2014, 06:31   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

А проблема то в чем?
Я бы пилил поиск в ширину.

Добавить лишь небольшую особенность в том, что суммируется не только вес дуг, но и время ожидание прибавляется.

Рейсов много, поиск восновном будет там крутить и время тратить. Тебе ж надо будет выбрать рейсы, которые отправляются после заданного момента.
Я думаю рейсы надо засунуть в set отсортированными по времени.

начальный город Г, время В.
Перебираешь все рейсы, выходящие из Г во время после В.
Для каждого города прибытия автобуса сохраняешь оценку минимальную
В + Х + Ж.
Тут Х - время хода автобуса, Ж - время ожидания (автобус не сразу готов).

Города, в которые смог попасть (номера городов) сохраняешь в очереди. Сохраняешь не все города, а только те, которые улучшили оценку.

Берешь первый город очереди и повторяешь для него описанный выше алгоритм.

Очередь кончилась? - смотри оценку для города назначения. Оценка - это и есть искомое время.

Последний раз редактировалось Stilet; 18.07.2014 в 07:53.
rrrFer вне форума Ответить с цитированием
Старый 18.07.2014, 12:15   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Последний раз редактировалось Simply-Art; Сегодня в 09:21. Причина: поправил input файл
Спасибо

Цитата:
Я бы пилил поиск в ширину.
Спасибо
Цитата:
Я думаю рейсы надо засунуть в set отсортированными по времени.
На кой? Сделать для каждой деревни список соседей, не?

Цитата:
Сохраняешь не все города, а только те, которые улучшили оценку.
Сходу я контрпример сообразить не могу.. Но ИМХО он имеется..
Poma][a вне форума Ответить с цитированием
Старый 18.07.2014, 13:46   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Но ИМХО он имеется..
ИМХО нет, алгоритм прост и прозрачен.

Цитата:
На кой? Сделать для каждой деревни список соседей, не?
тебе надо рейсы выбирать те, которые можно использовать, а не те, которые ушли пол часа назад. Поэтому по времени.
В set потому что [log2(10000)] = 14. Это эффективно.

Последний раз редактировалось rrrFer; 18.07.2014 в 13:48.
rrrFer вне форума Ответить с цитированием
Старый 18.07.2014, 13:59   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
ИМХО нет, алгоритм прост и прозрачен.
Алгоритм - да (спасибо).. а этот момент нет (ИМХО)
Цитата:
тебе надо рейсы выбирать те, которые можно использовать, а не те, которые ушли пол часа назад. Поэтому по времени.
И что? Солью я всё маршруты в множество, отсортирую по времени.. А дальше? Перебирать все каждый, что найти путь из A в B? А переход к следующему там за log.. Как-то не ахти..
Poma][a вне форума Ответить с цитированием
Старый 18.07.2014, 14:07   #6
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну можешь для каждой вершины завести словарь исходящих маршрутов. Эффективность это поднимет, но в худшем случае все равно log2(10000).

Я бы не заморчивался. Я думаю тесты мой вариант пройдет и так (по времени в т.ч.).

Цитата:
Сделать для каждой деревни список соседей, не?
Список...ну ну. Где гарантия, что у одно из дереведь не будет, скажем 500 соседей. Я думаю лучше перебирать не более 14 элементов, чем 500. А может быть и не 500... Можешь для каждой деревни бахнуть set, но мне бы лень было, зачем? - этож обычная задача. Тесты проходит - хорошо, а если не проходит то продолжаем что-нибудь мутить.

Цитата:
Задачу можно решить перебором..
Вот перебором решить нельзя, не пройдет по времени 99%

Последний раз редактировалось rrrFer; 18.07.2014 в 14:10.
rrrFer вне форума Ответить с цитированием
Старый 18.07.2014, 16:39   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Где гарантия, что у одно из дереведь не будет, скажем 500 соседей.
И в чем проблема? 500 - это семечки..

Ваша идея была (если я прально ее понял) слить все рейсы в множество.
И для каждой мы должны были перебирать возможные.. Это O(log2(n)*n^2) (с коэффициентом < 1)


Ночью напишу..
Poma][a вне форума Ответить с цитированием
Старый 18.07.2014, 22:32   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Ваша идея была (если я прально ее понял) слить все рейсы в множество.
И для каждой мы должны были перебирать возможные.
непрально понял. Вроде бы n*log2(n). Откуда у тебя квадрат?
rrrFer вне форума Ответить с цитированием
Старый 18.07.2014, 23:15   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Откуда у тебя квадрат?
Еще раз.. Загоняем всё в set.. Запускаем bfs.. Его сложность O(n).. Но у нас не список соседей для каждой деревни, а один set.. И чтобы найти маршруты из деревки X в деревню Y. Мы должны пробежаться по set'y.. Вот еще O(n)
А т.к. у нас set.. и переход к след элементу там за O(log2(n)).. то получаем O(n*n*log2(n))
Poma][a вне форума Ответить с цитированием
Старый 19.07.2014, 05:51   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну да, чето туплю я.
вставляй set в каждый узел xD.

Цитата:
Мы должны пробежаться по set'y.. Вот еще O(n)
А т.к. у нас set.. и переход к след элементу там за O(log2(n)).. то получаем O(n*n*log2(n))
Но ты не знаешь то есть set. Ты можешь просто последовательно его перебирать тогда время доступа О(1). Т.е. "пробежаться по сету" можно за О(N).

типа того:
Код:
set<int> myset;
for (auto t : myset) {
  cout << t;
}
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Олимпиадная задача "Золото племени АББА" на Pascal (№7 с acmp.ru) Ghost3 Помощь студентам 19 17.01.2013 21:04
Задача "Лампочки" на Pascal (№337 с acmp.ru) Ghost3 Помощь студентам 18 01.11.2012 14:10
Олимпиадная задача "Встреча" (на поиск оптимального маршрута, графы) woofer46 Фриланс 2 15.01.2012 15:26
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04