In the event of technical difficulties with Szkopuł, please contact us via email at [email protected].
If you would like to talk about tasks, solutions or technical problems, please visit our Discord servers. They are moderated by the community, but members of the support team are also active there.
Firma Bajtosoft zatrudnia pracowników. Z powodu tajności projektów przez nią wykonywanych, nie wszyscy spośród nich się znają. Znają się ze sobą tylko ci, którzy zajmują się kolejnymi fazami pracy nad projektami.
Każdy projekt jest opracowywany w sposób sekwencyjny: najpierw pracownik nr (szef zespołu) tworzy pierwszy szkic projektu, następnie przekazuje go pracownikowi nr ; ten po wykonaniu swojego zadania efekt pracy przekazuje pracownikowi nr , i tak dalej, aż w końcu projekt trafia do pracownika nr , który kończy pracę nad nim i przekazuje gotowy produkt szefowi (pracownikowi nr ).
Każdy pracownik ma w umowie zapisaną wysokość pensji, która mu przysługuje. Jednak firma nie zawsze dobrze wywiązuje się z umowy i choć zawsze wypłaca w sumie tyle pieniędzy swoim pracownikom, ile im się łącznie należy, to jednak nie zawsze wypłaca pieniądze właściwym osobom. Często zdarza się tak, że pewna osoba dostaje mniej pieniędzy, niż ma to zagwarantowane w umowie, zaś inna dostaje więcej, niż powinna.
Na szczęście pracownicy są uczciwi, dlatego umówili się, że po każdej wypłacie będą między sobą regulować wysokość otrzymanej pensji, tak aby ostatecznie każdy otrzymał dokładnie tyle, ile ma zagwarantowane w umowie.
Mają tylko jeden problem: przekazywać między sobą pieniądze mogą tylko ci pracownicy, którzy się znają, tzn. dla każdego pracownik nr może przekazać lub otrzymać pieniądze jedynie od pracowników nr oraz , pracownik nr może dokonywać transakcji z pracownikami nr oraz nr , zaś pracownik nr może dokonywać transakcji z pracownikami nr oraz nr .
Ponieważ każde takie wyrównywanie płac wymaga wielu transakcji, pracownicy Bajtosoftu poprosili Ciebie, niezależnego programistę, o napisanie programu, który po każdej wypłacie wyznaczy minimalną liczbę transakcji potrzebnych do wyrównania rachunków.
Zakładamy tutaj, że pracownicy wykorzystują w transakcjach tylko te sumy pieniędzy, które otrzymali w ramach danej wypłaty od firmy, oraz te, które otrzymali od innych pracowników w poprzednich transakcjach.
W pierwszym wierszu standardowego wejścia znajduje się jedna liczba całkowita () oznaczająca liczbę pracowników Bajtosoftu.
W każdym z następnych wierszy znajdują się dwie liczby całkowite oraz (), oddzielone pojedynczym odstępem i oznaczające pensję -tego pracownika zagwarantowaną w umowie oraz ilość pieniędzy, którą otrzymał w rzeczywistości (wyrażone w bajtalarach). Możesz założyć, że .
Możesz założyć, że w testach wartych łącznie punktów zachodzi , a w podzbiorze tychże testów wartym punktów - dodatkowe ograniczenie: .
Twój program powinien wypisać w pierwszym i jedynym wierszu standardowego wyjścia jedną liczbę całkowitą oznaczającą minimalną liczbę transakcji pomiędzy znającymi się pracownikami, która doprowadzi do stanu, w którym każdy pracownik otrzyma ostatecznie (po uwzględnieniu wszystkich transakcji) tyle pieniędzy, ile ma zagwarantowane w umowie.
W przypadku gdy żaden zestaw transakcji nie doprowadzi do takiego stanu, należy wypisać jedno słowo "NIE".
Dla danych wejściowych:
4 10 13 5 4 5 6 8 5
poprawną odpowiedzią jest:
2
Wyjaśnienie do przykładu: Wyrównanie wszystkich pensji następuje w dwóch krokach: pracownik nr 3 przekazuje pracownikowi nr 2 jednego bajtalara, a pracownik nr 1 przekazuje pracownikowi nr 4 trzy bajtalary.
Autor zadania: Marian M. Kędzierski.