{"id":"informatyka-2026-maj-matura-rozszerzona/zad/4","paper_id":"informatyka-2026-maj-matura-rozszerzona","number":"4","points":8,"ptype":"open","subject":"informatyka","category":"matura","year":2026,"month":"maj","level":"rozszerzona","text":"Zadanie 4. Korporacja\nW korporacji pracuje n osób, które na potrzeby zadania ponumerujemy liczbami 1, 2, …, n.\nPracownik numer 1 jest prezesem korporacji, a każdy z pozostałych pracowników ma\ndokładnie jednego bezpośredniego przełożonego.\nNumer bezpośredniego przełożonego pracownika x jest zawsze mniejszy od numeru tego\npracownika.\nPrezes korporacji nie ma żadnego przełożonego. Przełożonym pracownika jest jego\nbezpośredni przełożony i każdy przełożony tego bezpośredniego przełożonego.\nJeśli x jest (bezpośrednim) przełożonym y, to powiemy, że y jest (bezpośrednim)\npodwładnym x. Prezes jest przełożonym każdego pracownika.\nPrzykład 1.\nRysunek 1. Przykład hierarchii w korporacji (strzałki wskazują na bezpośrednich\nprzełożonych).\nPrzełożonymi pracownika 7 są pracownicy 3, 2 i 1. Bezpośrednim przełożonym pracownika 7\njest pracownik 3. Pracownik 3 (podobnie jak 5 oraz 6) jest bezpośrednim podwładnym\npracownika 2, a podwładnymi pracownika 2 są pracownicy 3, 5, 6 i 7.","answer":null,"answer_text":"1\n1","solution":"Odpowiedź: **4.1.** Dla hierarchii z Rysunku 1.: | Pracownik | Bezpośredni podwładni | Wszyscy podwładni | |---|---|---| | 1 | **2** | **7** | | 2 | **3** | **4** | | 3 | **1** | **1** | | 4 | **1** | **1** | | 5 | 0 | 0 | | 6 | 0 | 0 | | 7 | 0 | 0 | | 8 | 0 | 0 | **4.2.** **25 113** **4.3.** **2 19** — pracownik numer 2 ma 19 bezpośrednich podwładnych. **4.4.** **22 2** — największa liczba przełożonych to 22, a takich pracowników jest 2.\n\nTreść zadania (CKE)\n\nStruktura danych — to jest drzewo\n\nHierarchia korporacji to drzewo ukorzenione w prezesie:\n\n- każdy wierzchołek poza korzeniem ma dokładnie jednego rodzica (przełożonego),\n- „wszyscy podwładni\" = rozmiar poddrzewa minus sam wierzchołek,\n- „wszyscy przełożeni\" = głębokość wierzchołka.\n\nPlik korpo.txt to zapis tablicy rodziców: przel[i] w i-tym wierszu.\n\nRozwiązania wszystkich podpunktów\n\n```python\nprzel = [int(x) for x in open('korpo.txt')]\nn = len(przel) # przel[0] dotyczy pracownika 1\n\n4.2 — liczba liści\nbezposredni = [0] * (n + 1)\nfor i in range(2, n + 1):\nbezposredni[przel[i - 1]] += 1\nprint('4.2', sum(1 for i in range(1, n + 1) if bezposredni[i] == 0))\n\n4.3 — najwięcej bezpośrednich podwładnych\nnaj = max(range(1, n + 1), key=lambda i: bezposredni[i])\nprint('4.3', naj, bezposredni[naj])\n\n4.4 — największa liczba przełożonych (głębokość)\nglebokosc = [0] * (n + 1)\nfor i in range(2, n + 1): # numer przełożonego < i, więc jest już policzony\nglebokosc[i] = glebokosc[przel[i - 1]] + 1\nm = max(glebokosc[1:])\nprint('4.4', m, glebokosc.count(m))\n```\n\nWszystko w jednym przebiegu po tablicy — złożoność O(n).\n\nDlaczego kolejność numerów ma znaczenie\n\nGdyby przełożony mógł mieć numer większy od podwładnego, tablicy głębokości nie dałoby się wypełnić prostą pętlą rosnącą — trzeba by przejść drzewo w porządku BFS/DFS od korzenia. Zadanie celowo daje tę gwarancję, żeby rozwiązanie mieściło się w jednej pętli.\n\nPunktacja CKE\n\n- 4.1. 1 pkt · 4.2. 2 pkt · 4.3. 2 pkt · 4.4. 3 pkt.\n- Razem: 8 pkt.\n\nTypowy błąd: **Warunek „numer przełożonego jest zawsze mniejszy\" to nie ozdobnik — to klucz do wydajności.** Dzięki niemu można policzyć liczbę przełożonych **jednym przebiegiem od 1 do n**, bo przetwarzając pracownika `i`, jego przełożony jest już policzony: ``` przelozonych[i] = przelozonych[przel[i]] + 1 ``` Bez tej obserwacji naturalne jest wspinanie się po drzewie dla każdego pracownika osobno — to działa, ale przy 50 000 pracowników i głębokim drzewie robi się kwadratowo wolne. **4.2 — „nie jest przełożonym żadnego pracownika\" to liście drzewa**, czyli pracownicy o zerowej liczbie bezpośrednich podwładnych. Nie mylić z „nie ma przełożonego\" — taki jest tylko jeden, prezes. **4.4 — pytanie jest o przełożonych, nie podwładnych**, i o **wszystkich**, nie bezpośrednich. To po prostu **głębokość** pracownika w drzewie. Odpowiedź ma dwie liczby: maksymalną głębokość i liczbę pracowników na tej głębokości. **W 4.1 kolumny łatwo pomylić.** „Wszyscy podwładni\" liczy całe poddrzewo, nie tylko dzieci — pracownik 2 ma 3 bezpośrednich (3, 5, 6), ale 4 wszystkich (dochodzi 7).","image":"img/informatyka-2026-maj-matura-rozszerzona/zad-4.webp","solution_image":null,"topics":"drzewo, hierarchia, przetwarzanie pliku, zliczanie podwladnych","page_from":12,"source":"ocr","answer_source":null,"answer_text_source":"ocr","solution_source":"maturaonline","text_source":"ocr","source_label":"Informatyka · Matura · maj 2026 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 4. Korporacja<br>W korporacji pracuje n osób, które na potrzeby zadania ponumerujemy liczbami 1, 2, …, n.<br>Pracownik numer 1 jest prezesem korporacji, a każdy z pozostałych pracowników ma<br>dokładnie jednego bezpośredniego przełożonego.<br>Numer bezpośredniego przełożonego pracownika x jest zawsze mniejszy od numeru tego<br>pracownika.<br>Prezes korporacji nie ma żadnego przełożonego. Przełożonym pracownika jest jego<br>bezpośredni przełożony i każdy przełożony tego bezpośredniego przełożonego.<br>Jeśli x jest (bezpośrednim) przełożonym y, to powiemy, że y jest (bezpośrednim)<br>podwładnym x. Prezes jest przełożonym każdego pracownika.<br>Przykład 1.<br>Rysunek 1. Przykład hierarchii w korporacji (strzałki wskazują na bezpośrednich<br>przełożonych).<br>Przełożonymi pracownika 7 są pracownicy 3, 2 i 1. Bezpośrednim przełożonym pracownika 7<br>jest pracownik 3. Pracownik 3 (podobnie jak 5 oraz 6) jest bezpośrednim podwładnym<br>pracownika 2, a podwładnymi pracownika 2 są pracownicy 3, 5, 6 i 7.</p>","answer_text_html":"<p>1<br>1</p>","solutions":[{"source":"maturaonline","label":"matura-online.pl","kind":"text","html":"<p>Odpowiedź: <strong>4.1.</strong> Dla hierarchii z Rysunku 1.: | Pracownik | Bezpośredni podwładni | Wszyscy podwładni | |---|---|---| | 1 | <strong>2</strong> | <strong>7</strong> | | 2 | <strong>3</strong> | <strong>4</strong> | | 3 | <strong>1</strong> | <strong>1</strong> | | 4 | <strong>1</strong> | <strong>1</strong> | | 5 | 0 | 0 | | 6 | 0 | 0 | | 7 | 0 | 0 | | 8 | 0 | 0 | <strong>4.2.</strong> <strong>25 113</strong> <strong>4.3.</strong> <strong>2 19</strong> — pracownik numer 2 ma 19 bezpośrednich podwładnych. <strong>4.4.</strong> <strong>22 2</strong> — największa liczba przełożonych to 22, a takich pracowników jest 2.</p>\n<p>Treść zadania (CKE)</p>\n<p>Struktura danych — to jest drzewo</p>\n<p>Hierarchia korporacji to drzewo ukorzenione w prezesie:</p>\n<ul><li>każdy wierzchołek poza korzeniem ma dokładnie jednego rodzica (przełożonego),</li><li>„wszyscy podwładni&quot; = rozmiar poddrzewa minus sam wierzchołek,</li><li>„wszyscy przełożeni&quot; = głębokość wierzchołka.</li></ul>\n<p>Plik korpo.txt to zapis tablicy rodziców: przel[i] w i-tym wierszu.</p>\n<p>Rozwiązania wszystkich podpunktów</p>\n<p>```python<br>przel = [int(x) for x in open(&#x27;korpo.txt&#x27;)]<br>n = len(przel) # przel[0] dotyczy pracownika 1</p>\n<p>4.2 — liczba liści<br>bezposredni = [0] * (n + 1)<br>for i in range(2, n + 1):<br>bezposredni[przel[i - 1]] += 1<br>print(&#x27;4.2&#x27;, sum(1 for i in range(1, n + 1) if bezposredni[i] == 0))</p>\n<p>4.3 — najwięcej bezpośrednich podwładnych<br>naj = max(range(1, n + 1), key=lambda i: bezposredni[i])<br>print(&#x27;4.3&#x27;, naj, bezposredni[naj])</p>\n<p>4.4 — największa liczba przełożonych (głębokość)<br>glebokosc = [0] * (n + 1)<br>for i in range(2, n + 1): # numer przełożonego &lt; i, więc jest już policzony<br>glebokosc[i] = glebokosc[przel[i - 1]] + 1<br>m = max(glebokosc[1:])<br>print(&#x27;4.4&#x27;, m, glebokosc.count(m))<br>```</p>\n<p>Wszystko w jednym przebiegu po tablicy — złożoność O(n).</p>\n<p>Dlaczego kolejność numerów ma znaczenie</p>\n<p>Gdyby przełożony mógł mieć numer większy od podwładnego, tablicy głębokości nie dałoby się wypełnić prostą pętlą rosnącą — trzeba by przejść drzewo w porządku BFS/DFS od korzenia. Zadanie celowo daje tę gwarancję, żeby rozwiązanie mieściło się w jednej pętli.</p>\n<p>Punktacja CKE</p>\n<ul><li>4.1. 1 pkt · 4.2. 2 pkt · 4.3. 2 pkt · 4.4. 3 pkt.</li><li>Razem: 8 pkt.</li></ul>\n<p>Typowy błąd: <strong>Warunek „numer przełożonego jest zawsze mniejszy&quot; to nie ozdobnik — to klucz do wydajności.</strong> Dzięki niemu można policzyć liczbę przełożonych <strong>jednym przebiegiem od 1 do n</strong>, bo przetwarzając pracownika <code>i</code>, jego przełożony jest już policzony: ``<code> przelozonych[i] = przelozonych[przel[i]] + 1 </code>`` Bez tej obserwacji naturalne jest wspinanie się po drzewie dla każdego pracownika osobno — to działa, ale przy 50 000 pracowników i głębokim drzewie robi się kwadratowo wolne. <strong>4.2 — „nie jest przełożonym żadnego pracownika&quot; to liście drzewa</strong>, czyli pracownicy o zerowej liczbie bezpośrednich podwładnych. Nie mylić z „nie ma przełożonego&quot; — taki jest tylko jeden, prezes. <strong>4.4 — pytanie jest o przełożonych, nie podwładnych</strong>, i o <strong>wszystkich</strong>, nie bezpośrednich. To po prostu <strong>głębokość</strong> pracownika w drzewie. Odpowiedź ma dwie liczby: maksymalną głębokość i liczbę pracowników na tej głębokości. <strong>W 4.1 kolumny łatwo pomylić.</strong> „Wszyscy podwładni&quot; liczy całe poddrzewo, nie tylko dzieci — pracownik 2 ma 3 bezpośrednich (3, 5, 6), ale 4 wszystkich (dochodzi 7).</p>"}]}