197722025-12-22 14:23:42LacikaKvHírlánccpp17Időlimit túllépés 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
subtask220/20
2Elfogadva1ms508 KiB
3Elfogadva1ms324 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva2ms316 KiB
9Elfogadva3ms316 KiB
10Elfogadva1ms508 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms508 KiB
subtask318/18
13Elfogadva41ms2736 KiB
14Elfogadva43ms2804 KiB
15Elfogadva45ms2936 KiB
16Elfogadva46ms2984 KiB
17Elfogadva52ms4400 KiB
18Elfogadva50ms4664 KiB
19Elfogadva48ms4780 KiB
20Elfogadva52ms4780 KiB
21Elfogadva50ms8016 KiB
22Elfogadva54ms9008 KiB
subtask40/42
23Elfogadva2ms316 KiB
24Elfogadva1ms508 KiB
25Elfogadva1ms324 KiB
26Elfogadva1ms316 KiB
27Elfogadva1ms316 KiB
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva2ms316 KiB
31Elfogadva3ms316 KiB
32Elfogadva1ms508 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms508 KiB
35Elfogadva41ms2736 KiB
36Elfogadva43ms2804 KiB
37Elfogadva45ms2936 KiB
38Elfogadva46ms2984 KiB
39Elfogadva52ms4400 KiB
40Elfogadva50ms4664 KiB
41Elfogadva48ms4780 KiB
42Elfogadva52ms4780 KiB
43Elfogadva50ms8016 KiB
44Elfogadva54ms9008 KiB
45Elfogadva43ms2612 KiB
46Elfogadva43ms2732 KiB
47Elfogadva57ms2728 KiB
48Elfogadva48ms2868 KiB
49Időlimit túllépés532ms3124 KiB
50Időlimit túllépés580ms3372 KiB
51Időlimit túllépés600ms3380 KiB
52Időlimit túllépés600ms3380 KiB
53Időlimit túllépés584ms4148 KiB
54Időlimit túllépés580ms4664 KiB