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

Обсуждение задачи 1040. Авиакомпания

help!where is my program wrong?
Послано girl 7 фев 2003 08:06
type btype=record
       x,y:integer
       end;
var b,c:array[1..1000] of integer;
    a:array[1..1000] of btype;
    m,n,i:integer;
    v:array[1..1000] of boolean;
function ok(x,dep:integer):boolean;
var ff,min,t,f1,f2,i,j:integer;
    e:array[1..1000] of integer;
begin
  ok:=true;
  if b[a[x].x]=1 then
  begin
    t:=0;
    f1:=0;
    f2:=0;
    for i:=1 to dep-1 do
    if (a[c[i]].x=a[x].x) then
    begin
      inc(t);
      e[t]:=i;
      if i mod 2=0 then inc(f2)
      else inc(f1);
    end
    else if (a[c[i]].y=a[x].x) then
    begin
      inc(t);
      e[t]:=i;
      if i mod 2=0 then inc(f2)
      else inc(f1);
    end;
    inc(t);
    e[t]:=dep;
    if dep mod 2=0 then inc(f2)
    else inc(f1);
    if (t=1) then exit;
    if (t>=2) and (f1=0) then
    begin
      ok:=false;
      exit;
    end;
    min:=0;
    min:=e[1];
    for i:=2 to t do
    if e[i]<min then min:=e[i];
    if min=1 then exit;
    for i:=2 to min do
    begin
       ff:=0;
       for j:=1 to t do
       if e[j] mod i=0 then inc(ff)
       else break;
       if ff=t then
       begin
         ok:=false;
         exit;
       end;
    end;
    if b[a[x].y]=1 then
  begin
    t:=0;
    f1:=0;
    f2:=0;
    for i:=1 to dep-1 do
    if (a[c[i]].x=a[x].y) then
    begin
      inc(t);
      e[t]:=i;
      if i mod 2=0 then inc(f2)
      else inc(f1);
    end
    else if (a[c[i]].y=a[x].y) then
    begin
      inc(t);
      e[t]:=i;
      if i mod 2=0 then inc(f2)
      else inc(f1);
    end;
    inc(t);
    e[t]:=dep;
    if (t=1) then exit;
    if (t=2) and (f1=0) then
    begin
      ok:=false;
      exit;
    end;
    if (t>2) and (f1=0) then
    begin
      ok:=false;
      exit;
    end;
    min:=e[1];
    for i:=2 to t do
    if e[i]<min then min:=e[i];
    for i:=2 to min do
    begin
       ff:=0;
       for j:=1 to t do
       if e[j] mod i=0 then inc(ff)
       else break;
       if ff=t then
       begin
         ok:=false;
         exit;
       end;
    end;
end;
end;
end;
procedure search(dep:integer);
var i,j:integer;
begin
  for i:=1 to m do
  if ok(i,dep) and (v[i]=false) then
  begin
    v[i]:=true;
    c[dep]:=i;
    dec(b[a[i].x]);
    dec(b[a[i].y]);
    if dep=m then
    begin
      writeln('YES');
      for j:=1 to m do
        write(c[j]:5);
        halt;
    end
    else search(dep+1);
    c[dep]:=0;
    inc(b[a[i].x]);
    inc(b[a[i].y]);
    v[i]:=false;
  end;
end;
begin
  read(n,m);
  fillchar(v,sizeof(v),0);
  fillchar(a,sizeof(a),0);
  fillchar(b,sizeof(b),0);
  for i:=1 to m do
  begin
    read(a[i].x,a[i].y);
    inc(b[a[i].x]);
    inc(b[a[i].y]);
  end;
  search(1);
  writeln('NO');
end.