197702025-12-22 14:09:59LacikaKvHírlánccpp17Időlimit túllépés 38/80600ms8244 KiB
#include <stdio.h>
#include <string.h>

struct diak
{
    int tovaad;
    int maxhossz=0;
};

void ResetSzamolas(bool *szamolt, int len) {
   memset(szamolt,0,(len+1)*sizeof(bool));
}

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);
//}

//void EqualizeLoop(int len, diak* a, bool *szamolt, int spos)
//{  if (IsLoopStartPos(len, a, szamolt,spos)) {
////      cout << "Kor:" << spos << endl;
//      MaximizeLoop(a, spos, a[spos].tovaad, a[spos].maxhossz);
//   } else {
//      ResetSzamolas(szamolt,len);
////      cout << "Lepjel:" << a[spos].tovaad << endl;
//      EqualizeLoop(len, a, szamolt, a[spos].tovaad);
//   }
//}

int lanchossz (diak *e, int len, diak *a, bool *szamolt, int pos, int *ringpos)
{
   if (a[pos].maxhossz) {
//      cout << endl;
      return a[pos].maxhossz;
   }
   if (szamolt[pos]) {
      *ringpos = pos;
   } else {
      szamolt[pos] = true;
//      cout << pos << "->" << a[pos].maxhossz << ", ";
      a[pos].maxhossz = lanchossz (e, len, a, szamolt, 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} };

   /**/
   bool szamolt[N+1];
   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;
         ResetSzamolas(szamolt,N);
         lanchossz(&eredm, N+1, a, szamolt, 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
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms500 KiB
7Elfogadva1ms316 KiB
8Elfogadva2ms412 KiB
9Elfogadva3ms412 KiB
10Elfogadva2ms316 KiB
11Elfogadva2ms500 KiB
12Elfogadva1ms508 KiB
subtask318/18
13Elfogadva93ms2100 KiB
14Elfogadva46ms2100 KiB
15Elfogadva43ms2360 KiB
16Elfogadva43ms2572 KiB
17Elfogadva46ms3892 KiB
18Elfogadva46ms4288 KiB
19Elfogadva46ms4148 KiB
20Elfogadva46ms4308 KiB
21Elfogadva50ms7220 KiB
22Elfogadva52ms8244 KiB
subtask40/42
23Elfogadva1ms316 KiB
24Elfogadva1ms316 KiB
25Elfogadva1ms316 KiB
26Elfogadva1ms316 KiB
27Elfogadva1ms316 KiB
28Elfogadva1ms500 KiB
29Elfogadva1ms316 KiB
30Elfogadva2ms412 KiB
31Elfogadva3ms412 KiB
32Elfogadva2ms316 KiB
33Elfogadva2ms500 KiB
34Elfogadva1ms508 KiB
35Elfogadva93ms2100 KiB
36Elfogadva46ms2100 KiB
37Elfogadva43ms2360 KiB
38Elfogadva43ms2572 KiB
39Elfogadva46ms3892 KiB
40Elfogadva46ms4288 KiB
41Elfogadva46ms4148 KiB
42Elfogadva46ms4308 KiB
43Elfogadva50ms7220 KiB
44Elfogadva52ms8244 KiB
45Időlimit túllépés500ms2152 KiB
46Időlimit túllépés505ms1948 KiB
47Időlimit túllépés549ms2100 KiB
48Időlimit túllépés523ms2204 KiB
49Időlimit túllépés578ms2356 KiB
50Időlimit túllépés600ms2976 KiB
51Időlimit túllépés600ms2976 KiB
52Időlimit túllépés600ms2996 KiB
53Időlimit túllépés579ms3380 KiB
54Időlimit túllépés600ms3996 KiB