197742025-12-22 14:43:59LacikaKvHírlánccpp17Accepted 80/8054ms8756 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;
//   KiirDiak(a, N);
   for (int i=N; i>0; i--) {
      if (a[i].maxhossz == 0) {
//         cout << endl << "Elem:" << i << endl;
         ringpos = 0;
         lanchossz(&eredm, N+1, a, i,&ringpos);
         if (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
1Accepted1ms508 KiB
subtask220/20
2Accepted2ms500 KiB
3Accepted2ms316 KiB
4Accepted2ms508 KiB
5Accepted2ms316 KiB
6Accepted1ms316 KiB
7Accepted1ms316 KiB
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
12Accepted1ms316 KiB
subtask318/18
13Accepted43ms2728 KiB
14Accepted45ms2612 KiB
15Accepted45ms2728 KiB
16Accepted48ms3228 KiB
17Accepted52ms4464 KiB
18Accepted52ms4660 KiB
19Accepted52ms4776 KiB
20Accepted50ms4780 KiB
21Accepted54ms7732 KiB
22Accepted54ms8756 KiB
subtask442/42
23Accepted1ms316 KiB
24Accepted2ms500 KiB
25Accepted2ms316 KiB
26Accepted2ms508 KiB
27Accepted2ms316 KiB
28Accepted1ms316 KiB
29Accepted1ms316 KiB
30Accepted1ms316 KiB
31Accepted1ms316 KiB
32Accepted1ms316 KiB
33Accepted1ms316 KiB
34Accepted1ms316 KiB
35Accepted43ms2728 KiB
36Accepted45ms2612 KiB
37Accepted45ms2728 KiB
38Accepted48ms3228 KiB
39Accepted52ms4464 KiB
40Accepted52ms4660 KiB
41Accepted52ms4776 KiB
42Accepted50ms4780 KiB
43Accepted54ms7732 KiB
44Accepted54ms8756 KiB
45Accepted41ms2724 KiB
46Accepted43ms2612 KiB
47Accepted43ms2616 KiB
48Accepted43ms2736 KiB
49Accepted45ms3124 KiB
50Accepted43ms3420 KiB
51Accepted45ms3632 KiB
52Accepted43ms3500 KiB
53Accepted45ms4344 KiB
54Accepted45ms4660 KiB