ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1210. Добрые духи

Help me!!!
Послано gc007 20 окт 2002 07:24
const max=900;
var
 way:array[1..max,1..31]of record
                            s:integer;
                            no:integer;
                           end;
 map:array[1..max]of integer;
 n,m,before,x:integer;

procedure zl;
 var i,j,code,k,l,p,j1:integer;
     t:text;
     c:char;
  begin
   fillchar(way,sizeof(way),0);
   fillchar(map,sizeof(map),0);
   assign(t,'');reset(t);
   readln(t,n);
   m:=1;before:=1;
   for l:=1 to n do
   begin
    readln(t,x);
    i:=1;
     for p:=1 to x do
      begin
       read(t,j);
       while j<>0 do
        begin
         if j<>0 then begin
                       read(t,j1);
                       inc(map[m-before+j]);
                       k:=map[m-before+j];
                       way[m-before+j,k].s:=j1;
                       way[m-before+j,k].no:=m+i;
                      end;
         read(t,j);
        end;
       inc(i);
       readln(t);
      end;
    if l<>n then readln(t,c);
    m:=m+x;
    before:=x;
  end;
  close(t);
 end;

procedure gc;
 var i,j:integer;
     ok:array[1..max]of longint;
     yes:array[1..max]of boolean;
  begin
   fillchar(ok,sizeof(ok),0);
   fillchar(yes,sizeof(yes),true);
   for i:=1 to m do
    for j:=1 to map[i] do
      if (ok[i]+way[i,j].s<ok[way[i,j].no])
       or(yes[way[i,j].no]) then begin ok[way[i,j].no]:=ok[i]+way
[i,j].s;
                                    yes[way[i,j].no]:=false;end;

   x:=m;
   for i:=m-before+1 to m-1 do
    if ok[i]<=ok[x] then x:=i;
   writeln(ok[x]);
  end;

begin
 zl;
 gc;
end.
It is too long,gc007,haha..
Послано Arsenal 20 окт 2002 08:14