197712025-12-22 14:16:29LacikaKvHírlánccpp17Time limit exceeded 38/80601ms8756 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,le;
   le = N/4;
   i1=1; i2=2; i3=3; i4=4;
   for (i=0; i<le; i++) {
      scanf("%d %d %d %d",&(a[i1].tovaad),&(a[i2].tovaad),&(a[i3].tovaad),&(a[i4].tovaad));
      i1+=4;i2+=4;i3+=4;i4+=4;
   }
   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
1Accepted1ms508 KiB
subtask220/20
2Accepted1ms316 KiB
3Accepted1ms316 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted1ms316 KiB
7Accepted1ms316 KiB
8Accepted2ms316 KiB
9Accepted3ms316 KiB
10Accepted2ms492 KiB
11Accepted1ms568 KiB
12Accepted1ms616 KiB
subtask318/18
13Accepted43ms2856 KiB
14Accepted45ms2728 KiB
15Accepted46ms2724 KiB
16Accepted46ms2980 KiB
17Accepted52ms4524 KiB
18Accepted54ms4660 KiB
19Accepted52ms4780 KiB
20Accepted50ms4776 KiB
21Accepted52ms7592 KiB
22Accepted54ms8756 KiB
subtask40/42
23Accepted1ms512 KiB
24Accepted1ms316 KiB
25Accepted1ms316 KiB
26Accepted1ms316 KiB
27Accepted1ms316 KiB
28Accepted1ms316 KiB
29Accepted1ms316 KiB
30Accepted2ms316 KiB
31Accepted3ms316 KiB
32Accepted2ms492 KiB
33Accepted1ms568 KiB
34Accepted1ms616 KiB
35Accepted43ms2856 KiB
36Accepted45ms2728 KiB
37Accepted46ms2724 KiB
38Accepted46ms2980 KiB
39Accepted52ms4524 KiB
40Accepted54ms4660 KiB
41Accepted52ms4780 KiB
42Accepted50ms4776 KiB
43Accepted52ms7592 KiB
44Accepted54ms8756 KiB
45Accepted43ms2612 KiB
46Accepted45ms2724 KiB
47Accepted54ms2724 KiB
48Accepted50ms2732 KiB
49Time limit exceeded560ms3012 KiB
50Time limit exceeded589ms3496 KiB
51Time limit exceeded600ms3380 KiB
52Time limit exceeded601ms3496 KiB
53Time limit exceeded575ms4004 KiB
54Time limit exceeded600ms4772 KiB