197732025-12-22 14:31:12LacikaKvHírlánccpp17Időlimit túllépés 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
subtask220/20
2Elfogadva1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms508 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms404 KiB
8Elfogadva2ms412 KiB
9Elfogadva3ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
subtask318/18
13Elfogadva41ms2676 KiB
14Elfogadva43ms2764 KiB
15Elfogadva45ms2932 KiB
16Elfogadva43ms3080 KiB
17Elfogadva50ms4404 KiB
18Elfogadva50ms4660 KiB
19Elfogadva48ms4784 KiB
20Elfogadva48ms4660 KiB
21Elfogadva50ms7732 KiB
22Elfogadva54ms8764 KiB
subtask40/42
23Elfogadva1ms316 KiB
24Elfogadva1ms316 KiB
25Elfogadva1ms316 KiB
26Elfogadva1ms508 KiB
27Elfogadva1ms316 KiB
28Elfogadva1ms316 KiB
29Elfogadva1ms404 KiB
30Elfogadva2ms412 KiB
31Elfogadva3ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva41ms2676 KiB
36Elfogadva43ms2764 KiB
37Elfogadva45ms2932 KiB
38Elfogadva43ms3080 KiB
39Elfogadva50ms4404 KiB
40Elfogadva50ms4660 KiB
41Elfogadva48ms4784 KiB
42Elfogadva48ms4660 KiB
43Elfogadva50ms7732 KiB
44Elfogadva54ms8764 KiB
45Elfogadva41ms2632 KiB
46Elfogadva41ms2612 KiB
47Elfogadva46ms2612 KiB
48Elfogadva48ms2872 KiB
49Időlimit túllépés587ms2980 KiB
50Időlimit túllépés588ms3376 KiB
51Időlimit túllépés600ms3380 KiB
52Időlimit túllépés600ms3500 KiB
53Időlimit túllépés579ms4148 KiB
54Időlimit túllépés580ms4884 KiB