197742025-12-22 14:43:59LacikaKvHírlánccpp17Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms508 KiB
subtask220/20
2Elfogadva2ms500 KiB
3Elfogadva2ms316 KiB
4Elfogadva2ms508 KiB
5Elfogadva2ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
subtask318/18
13Elfogadva43ms2728 KiB
14Elfogadva45ms2612 KiB
15Elfogadva45ms2728 KiB
16Elfogadva48ms3228 KiB
17Elfogadva52ms4464 KiB
18Elfogadva52ms4660 KiB
19Elfogadva52ms4776 KiB
20Elfogadva50ms4780 KiB
21Elfogadva54ms7732 KiB
22Elfogadva54ms8756 KiB
subtask442/42
23Elfogadva1ms316 KiB
24Elfogadva2ms500 KiB
25Elfogadva2ms316 KiB
26Elfogadva2ms508 KiB
27Elfogadva2ms316 KiB
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva43ms2728 KiB
36Elfogadva45ms2612 KiB
37Elfogadva45ms2728 KiB
38Elfogadva48ms3228 KiB
39Elfogadva52ms4464 KiB
40Elfogadva52ms4660 KiB
41Elfogadva52ms4776 KiB
42Elfogadva50ms4780 KiB
43Elfogadva54ms7732 KiB
44Elfogadva54ms8756 KiB
45Elfogadva41ms2724 KiB
46Elfogadva43ms2612 KiB
47Elfogadva43ms2616 KiB
48Elfogadva43ms2736 KiB
49Elfogadva45ms3124 KiB
50Elfogadva43ms3420 KiB
51Elfogadva45ms3632 KiB
52Elfogadva43ms3500 KiB
53Elfogadva45ms4344 KiB
54Elfogadva45ms4660 KiB