197632025-12-22 12:05:26LacikaKvHírlánccpp17Hibás válasz 0/80600ms8244 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
1Hibás válasz1ms316 KiB
subtask20/20
2Hibás válasz8ms316 KiB
3Hibás válasz8ms316 KiB
4Hibás válasz8ms512 KiB
5Hibás válasz8ms316 KiB
6Hibás válasz8ms316 KiB
7Hibás válasz8ms508 KiB
8Hibás válasz9ms512 KiB
9Hibás válasz9ms316 KiB
10Hibás válasz2ms316 KiB
11Hibás válasz1ms316 KiB
12Hibás válasz2ms508 KiB
subtask30/18
13Hibás válasz171ms2100 KiB
14Hibás válasz86ms1956 KiB
15Hibás válasz79ms2348 KiB
16Hibás válasz79ms2612 KiB
17Hibás válasz83ms4004 KiB
18Hibás válasz83ms4148 KiB
19Hibás válasz90ms4148 KiB
20Hibás válasz82ms4148 KiB
21Hibás válasz86ms7220 KiB
22Hibás válasz86ms8244 KiB
subtask40/42
23Hibás válasz1ms508 KiB
24Hibás válasz8ms316 KiB
25Hibás válasz8ms316 KiB
26Hibás válasz8ms512 KiB
27Hibás válasz8ms316 KiB
28Hibás válasz8ms316 KiB
29Hibás válasz8ms508 KiB
30Hibás válasz9ms512 KiB
31Hibás válasz9ms316 KiB
32Hibás válasz2ms316 KiB
33Hibás válasz1ms316 KiB
34Hibás válasz2ms508 KiB
35Hibás válasz171ms2100 KiB
36Hibás válasz86ms1956 KiB
37Hibás válasz79ms2348 KiB
38Hibás válasz79ms2612 KiB
39Hibás válasz83ms4004 KiB
40Hibás válasz83ms4148 KiB
41Hibás válasz90ms4148 KiB
42Hibás válasz82ms4148 KiB
43Hibás válasz86ms7220 KiB
44Hibás válasz86ms8244 KiB
45Időlimit túllépés584ms2728 KiB
46Időlimit túllépés583ms2612 KiB
47Időlimit túllépés583ms2812 KiB
48Időlimit túllépés600ms2728 KiB
49Időlimit túllépés575ms3004 KiB
50Időlimit túllépés575ms2988 KiB
51Időlimit túllépés575ms3080 KiB
52Időlimit túllépés600ms2988 KiB
53Időlimit túllépés583ms3384 KiB
54Időlimit túllépés584ms4148 KiB