197732025-12-22 14:31:12LacikaKvHírlánccpp17Time limit exceeded 38/80600ms8764 KiB
#include <stdio.h>

struct diak
{
    int tovaad;
    int maxhossz=0;
    bool volt = false;
};

void MaximizeLoop(diak *a, int epos, int pos, int maxhossz)
{
   if (epos != pos) {
      a[pos].maxhossz = maxhossz;
      MaximizeLoop(a,epos,a[pos].tovaad,maxhossz);
   }
}

//bool IsLoopStartPos(int len, diak* a, bool *szamolt, int pos)
//{  int cpos = pos;
//   do {
//      szamolt[cpos] = true;
//      cpos = a[cpos].tovaad;
//   } while (!szamolt[cpos]);
//   return (cpos == pos);
//}

int lanchossz (diak *e, int len, diak *a, int pos, int *ringpos)
{
   if (a[pos].maxhossz) {
//      cout << endl;
      return a[pos].maxhossz;
   }
   if (a[pos].volt) {
      *ringpos = pos;
   } else {
      a[pos].volt = true;
//      cout << pos << "->" << a[pos].maxhossz << ", ";
      a[pos].maxhossz = lanchossz (e, len, a, a[pos].tovaad,ringpos) + 1;
      if (e->maxhossz < a[pos].maxhossz) {
         e->maxhossz = a[pos].maxhossz;
         e->tovaad = pos;
      }
//      cout << pos << "->" << a[pos].maxhossz << ", ";
   }
   return a[pos].maxhossz;
}
//void hirmax (diak *a, int len)
//{  int i,pos,maxh=0;
//   for (i=1; i<len; i++) {
//      if (a[i].maxhossz>maxh) {
//         maxh=a[i].maxhossz;
//         pos=i;
//      }
//   }
//   cout<<pos<<" "<<maxh<<endl;
//}

int main()
{
   diak eredm;
   int N;
//   std::ios_base::sync_with_stdio (false); // Supposedly makes I/O faster
   /**/

   scanf("%d",&N);
   diak a[N+1];
   int i,i1,i2,i3,i4,i5,i6,i7,i8,le,step = 8;
   le = N/step;
   i1=1, i2=2, i3=3, i4=4, i5=5, i6=6, i7=7, i8=8;
   for (i=0; i<le; i++) {
      scanf("%d %d %d %d %d %d %d %d",&(a[i1].tovaad),&(a[i2].tovaad),&(a[i3].tovaad),&(a[i4].tovaad),
                                      &(a[i5].tovaad),&(a[i6].tovaad),&(a[i7].tovaad),&(a[i8].tovaad));
      i1+=step,i2+=step,i3+=step,i4+=step;
      i5+=step,i6+=step,i7+=step,i8+=step;
   }
   for (i=i1;i<N+1;i++) {
      scanf("%d",&(a[i].tovaad));
   }
   /*/
   N = 11;
   diak a[N+1] = { {0,0}, {3,0}, {1,0}, {2,0}, {3,0}, {2,0}, {5,0}, {6,0}, {5,0}, {10,0}, {11,0}, {10,0} };

   /**/
   eredm.tovaad = 0;
   eredm.maxhossz = 0;
   int ringpos = 0;
//   KiirDiak(a, N);
   for (int i=N; i>0; i--) {
      if (a[i].maxhossz == 0) {
//         cout << endl << "Elem:" << i << endl;
         lanchossz(&eredm, N+1, a, i,&ringpos);
         MaximizeLoop(a, ringpos, a[ringpos].tovaad, a[ringpos].maxhossz);
//         KiirDiak(a, N+1);
//         cout << endl;
      }
   }
//   cout<<eredm.tovaad<<" "<<eredm.maxhossz<<endl;
   printf("%d %d",eredm.tovaad,eredm.maxhossz);
   return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
subtask220/20
2Accepted1ms316 KiB
3Accepted1ms316 KiB
4Accepted1ms508 KiB
5Accepted1ms316 KiB
6Accepted1ms316 KiB
7Accepted1ms404 KiB
8Accepted2ms412 KiB
9Accepted3ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
12Accepted1ms316 KiB
subtask318/18
13Accepted41ms2676 KiB
14Accepted43ms2764 KiB
15Accepted45ms2932 KiB
16Accepted43ms3080 KiB
17Accepted50ms4404 KiB
18Accepted50ms4660 KiB
19Accepted48ms4784 KiB
20Accepted48ms4660 KiB
21Accepted50ms7732 KiB
22Accepted54ms8764 KiB
subtask40/42
23Accepted1ms316 KiB
24Accepted1ms316 KiB
25Accepted1ms316 KiB
26Accepted1ms508 KiB
27Accepted1ms316 KiB
28Accepted1ms316 KiB
29Accepted1ms404 KiB
30Accepted2ms412 KiB
31Accepted3ms316 KiB
32Accepted1ms316 KiB
33Accepted1ms316 KiB
34Accepted1ms316 KiB
35Accepted41ms2676 KiB
36Accepted43ms2764 KiB
37Accepted45ms2932 KiB
38Accepted43ms3080 KiB
39Accepted50ms4404 KiB
40Accepted50ms4660 KiB
41Accepted48ms4784 KiB
42Accepted48ms4660 KiB
43Accepted50ms7732 KiB
44Accepted54ms8764 KiB
45Accepted41ms2632 KiB
46Accepted41ms2612 KiB
47Accepted46ms2612 KiB
48Accepted48ms2872 KiB
49Time limit exceeded587ms2980 KiB
50Time limit exceeded588ms3376 KiB
51Time limit exceeded600ms3380 KiB
52Time limit exceeded600ms3500 KiB
53Time limit exceeded579ms4148 KiB
54Time limit exceeded580ms4884 KiB