ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1211. Collective Guarantee

Why wa #3?
Posted by Maigo Akisame (maigoakisame@yahoo.com.cn) 25 Sep 2004 16:28
program ural1211;
const
  maxn=25000;
var
  next:array[1..maxn]of word;
  t,i:word;
procedure test;
  var
    sign:array[1..maxn]of word;
    n,i,x:word;
    zeros:byte;
  begin
    read(n);zeros:=0;
    for i:=1 to n do begin
      read(next[i]);
      if next[i]=0 then begin
        inc(zeros);
        if zeros>1 then break;
      end;
    end;
    if zeros<>1 then begin
      writeln('NO');
      exit;
    end;
    fillchar(sign,sizeof(sign),0);
    for i:=1 to n do begin
      x:=i;
      while x>0 do begin
        if sign[x]=i then begin
          writeln('NO');
          exit;
        end
        else if sign[x]>0 then
          break;
        sign[x]:=i;x:=next[x];
      end;
    end;
    writeln('YES');
  end;
begin
  read(t);
  for i:=1 to t do
    test;
end.
Re: Why wa #3?
Posted by hrushikesh 24 May 2005 19:04
I too get WA#3 to this one, here is my C solution:

#include<stdio.h>
#define true 1
#define false 0
main()
{
 int parent[25001] , T , temp , temp2 , temp3 , test;
 int N , answer , cur;
 int confess , resolved;
 scanf("%d" , &T);
 for(test = 1 ; test <= T ; test++)
 {
  scanf("%d" , &N);
  confess = resolved = false;
  for(temp = 1 ; temp <= N ; temp++)
   parent[temp] = -1;
  for(temp = 1 ; temp <= N && resolved == false ; temp++)
  {
   scanf("%d" , &answer);
   if(answer == 0)
   {
    if(confess) { printf("NO\n"); resolved = true; }
    else confess = true;
   }
   else
   {
    cur = temp;
    while(cur != -1 && cur != answer) cur = parent[cur];
    if(cur == answer){  printf("NO\n") ; resolved = true; }
    else parent[answer] = temp;
   }
  }
  if(resolved == false)
   printf("YES\n");
  for( ; temp <= N ; temp++)
   scanf("%d" , &answer);
 }
}



Edited by author 24.05.2005 19:04