197722025-12-22 14:23:42LacikaKvHírlánccpp17Time limit exceeded 38/80600ms9008 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=1; i<=N; 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
2Accepted1ms508 KiB
3Accepted1ms324 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted1ms316 KiB
7Accepted1ms316 KiB
8Accepted2ms316 KiB
9Accepted3ms316 KiB
10Accepted1ms508 KiB
11Accepted1ms316 KiB
12Accepted1ms508 KiB
subtask318/18
13Accepted41ms2736 KiB
14Accepted43ms2804 KiB
15Accepted45ms2936 KiB
16Accepted46ms2984 KiB
17Accepted52ms4400 KiB
18Accepted50ms4664 KiB
19Accepted48ms4780 KiB
20Accepted52ms4780 KiB
21Accepted50ms8016 KiB
22Accepted54ms9008 KiB
subtask40/42
23Accepted2ms316 KiB
24Accepted1ms508 KiB
25Accepted1ms324 KiB
26Accepted1ms316 KiB
27Accepted1ms316 KiB
28Accepted1ms316 KiB
29Accepted1ms316 KiB
30Accepted2ms316 KiB
31Accepted3ms316 KiB
32Accepted1ms508 KiB
33Accepted1ms316 KiB
34Accepted1ms508 KiB
35Accepted41ms2736 KiB
36Accepted43ms2804 KiB
37Accepted45ms2936 KiB
38Accepted46ms2984 KiB
39Accepted52ms4400 KiB
40Accepted50ms4664 KiB
41Accepted48ms4780 KiB
42Accepted52ms4780 KiB
43Accepted50ms8016 KiB
44Accepted54ms9008 KiB
45Accepted43ms2612 KiB
46Accepted43ms2732 KiB
47Accepted57ms2728 KiB
48Accepted48ms2868 KiB
49Time limit exceeded532ms3124 KiB
50Time limit exceeded580ms3372 KiB
51Time limit exceeded600ms3380 KiB
52Time limit exceeded600ms3380 KiB
53Time limit exceeded584ms4148 KiB
54Time limit exceeded580ms4664 KiB