197712025-12-22 14:16:29LacikaKvHírlánccpp17Időlimit túllépés 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms508 KiB
subtask220/20
2Elfogadva1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva2ms316 KiB
9Elfogadva3ms316 KiB
10Elfogadva2ms492 KiB
11Elfogadva1ms568 KiB
12Elfogadva1ms616 KiB
subtask318/18
13Elfogadva43ms2856 KiB
14Elfogadva45ms2728 KiB
15Elfogadva46ms2724 KiB
16Elfogadva46ms2980 KiB
17Elfogadva52ms4524 KiB
18Elfogadva54ms4660 KiB
19Elfogadva52ms4780 KiB
20Elfogadva50ms4776 KiB
21Elfogadva52ms7592 KiB
22Elfogadva54ms8756 KiB
subtask40/42
23Elfogadva1ms512 KiB
24Elfogadva1ms316 KiB
25Elfogadva1ms316 KiB
26Elfogadva1ms316 KiB
27Elfogadva1ms316 KiB
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva2ms316 KiB
31Elfogadva3ms316 KiB
32Elfogadva2ms492 KiB
33Elfogadva1ms568 KiB
34Elfogadva1ms616 KiB
35Elfogadva43ms2856 KiB
36Elfogadva45ms2728 KiB
37Elfogadva46ms2724 KiB
38Elfogadva46ms2980 KiB
39Elfogadva52ms4524 KiB
40Elfogadva54ms4660 KiB
41Elfogadva52ms4780 KiB
42Elfogadva50ms4776 KiB
43Elfogadva52ms7592 KiB
44Elfogadva54ms8756 KiB
45Elfogadva43ms2612 KiB
46Elfogadva45ms2724 KiB
47Elfogadva54ms2724 KiB
48Elfogadva50ms2732 KiB
49Időlimit túllépés560ms3012 KiB
50Időlimit túllépés589ms3496 KiB
51Időlimit túllépés600ms3380 KiB
52Időlimit túllépés601ms3496 KiB
53Időlimit túllépés575ms4004 KiB
54Időlimit túllépés600ms4772 KiB