197642025-12-22 12:13:47LacikaKvHírlánccpp17Időlimit túllépés 38/80600ms8368 KiB
#include <iostream>
#include <cstring>

using namespace std;
struct diak
{
    int tovaad;
    int maxhossz=0;
};

void KiirDiak(diak *a, int len)
{
   cout << endl;
   for (int i=1; i<len; i++) {
      cout << "{"<< a[i].tovaad <<", "<< a[i].maxhossz << "}";
      if (i<len)
         cout << ", ";
   }
   cout << endl;
}

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;
   /**/
   cin>>N;
   diak a[N+1];
   for (int i=1; i<=N; i++)
   {
     cin>>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;
   return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
subtask220/20
2Elfogadva3ms500 KiB
3Elfogadva3ms316 KiB
4Elfogadva4ms316 KiB
5Elfogadva4ms316 KiB
6Elfogadva3ms316 KiB
7Elfogadva3ms316 KiB
8Elfogadva4ms316 KiB
9Elfogadva4ms316 KiB
10Elfogadva2ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
subtask318/18
13Elfogadva128ms2100 KiB
14Elfogadva82ms2028 KiB
15Elfogadva78ms2220 KiB
16Elfogadva76ms2468 KiB
17Elfogadva81ms3892 KiB
18Elfogadva82ms4260 KiB
19Elfogadva82ms4148 KiB
20Elfogadva86ms4264 KiB
21Elfogadva89ms7220 KiB
22Elfogadva86ms8368 KiB
subtask40/42
23Elfogadva1ms316 KiB
24Elfogadva3ms500 KiB
25Elfogadva3ms316 KiB
26Elfogadva4ms316 KiB
27Elfogadva4ms316 KiB
28Elfogadva3ms316 KiB
29Elfogadva3ms316 KiB
30Elfogadva4ms316 KiB
31Elfogadva4ms316 KiB
32Elfogadva2ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva128ms2100 KiB
36Elfogadva82ms2028 KiB
37Elfogadva78ms2220 KiB
38Elfogadva76ms2468 KiB
39Elfogadva81ms3892 KiB
40Elfogadva82ms4260 KiB
41Elfogadva82ms4148 KiB
42Elfogadva86ms4264 KiB
43Elfogadva89ms7220 KiB
44Elfogadva86ms8368 KiB
45Időlimit túllépés579ms2220 KiB
46Időlimit túllépés579ms2100 KiB
47Időlimit túllépés579ms2108 KiB
48Időlimit túllépés600ms2212 KiB
49Időlimit túllépés578ms2612 KiB
50Időlimit túllépés578ms2868 KiB
51Időlimit túllépés578ms2872 KiB
52Időlimit túllépés600ms2868 KiB
53Időlimit túllépés584ms3496 KiB
54Időlimit túllépés586ms4148 KiB