Модераторы: bsa
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Олимпиадная задача, Олимпиадная задача 
:(
    Опции темы
GreYFoXik
Дата 16.9.2011, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.5.2011

Репутация: нет
Всего: нет



Народ подсобите чем можете. Всю голову уже сломал, а ответ то он вот он на поверхности.
Есть задача:
Участок железной дороги проходит через станции, пронумерованные от 1 до N. Из
расписания движения поездов известно, какой поезд на какой станции делает остановку.
Требуется определить, за какое минимальное время можно добраться от станции с номером
1 до станции с номером Р, и количество сделанных пересадок. Максимальное время работы на
одном тесте: 3 сек.
Формат входных данных.
Во входном файле записаны сначала числа: N (2 <= N <=100) и P (2 <= Р <= N). Затем
записано число M (0 <= M <= 100), обозначающее количество рейсов поездов. Далее идет
описание M рейсов поездов. Описание каждого рейса начинается с числа Ki (2 <= Ki <= N) —
количества станций, на которых поезд останавливается, а далее следует Ki пар чисел, первое число каждой пары задает номер станции, второе — время, когда поезд останавливается на этой станции
(время выражается целым числом из диапазона от 0 до 109). Станции внутри одного рейса
упорядочены в порядке возрастания времени. В течение одного рейса поезд все время движется в
одном направлении — либо от станции 1 в сторону станции N, либо в обратном направлении.
Формат выходных данных.
В выходной файл выведите два числа (по одному в строке) — минимальное время, за
которое можно добраться от станции 1 до станции Р, и количество пересадок. Если
существующими рейсами поездов это сделать невозможно, выведите -1.
Input.txt 
5 3
4 
2 1 5 2 10 
2 2 10 4 15
4 5 0 4 17 3 20 2 35
3 1 2 3 40 4 45


Output.txt
20
2

Довольно муторная но понять можно.
Вот мой код для ее решения:
Код
#include <stdio.h>
 
int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int N, M, E, **mas, **mas_res, i, j, ii, jj;
    scanf("%d %d\n%d\n", &N, &E, &M);
    mas=new int*[M];
    for(i=0; i<M; i++)
    {
        mas[i]=new int[2*N+1];
        scanf("%d ", &mas[i][0]);
        for(j=1; j<mas[i][0]*2+1; j++)
            scanf("%d ", &mas[i][j]);
        scanf("\n");
    }
    mas_res=new int*[N];
    for(i=0; i<N; i++)
    {
        mas_res[i]=new int[2];
        mas_res[i][1]=1000000;
    }
    mas_res[0][1]=0;
    //
    for(i=1; i<N; i++)
    {
        for(j=0; j<N; j++)
            mas_res[j][0]=mas_res[j][1];
        for(ii=0; ii<M; ii++)
            for(jj=1; jj<mas[ii][0]*2+1; jj+=2)
                for(j=jj+2; j<mas[ii][0]*2+1; j+=2)
                    if(mas_res[mas[ii][jj]-1][1]<=mas[ii][jj+1] && mas_res[mas[ii][j]-1][1]>mas[ii][j+1])
                        mas_res[mas[ii][j]-1][1]=mas[ii][j+1];
    }
    if(mas_res[E-1][1]==1000000)
        printf("-1");
    else
        printf("%d", mas_res[E-1][1]);
    return 0;
}


Код

Обычный алгоритм Дейкстры для поиска кратчайшего пути, но убей не понимаю где нужно эти самые пересадки считать.
Может кто-нибудь вникнет в проблему? Поможете, чем можете?




[/code]
PM MAIL   Вверх
JackYF
Дата 17.9.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162




M
JackYF
Олимпиадные задачи на то и олимпиадные, чтобы их решали сами.

Тема закрыта.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.