PROBLEM D: Przodek
Transkrypt
PROBLEM D: Przodek
XIV Dolnośląskie Zawody w Programowaniu Zespołowym, Wrocław, 21-22. czerwca 2011 PROBLEM D: Przodek Problem W drzewie z korzeniem dla dwóch wybranych wierzchołków zawsze istnieje najbliższy wspólny przodek. Przodkami wierzchołka v są wszystkie wierzchołki na drodze do korzenia, z tym wierzchołkiem włącznie. Dla dwóch wierzchołków u i v w drzewie najbliższy wspólny przodek jest to taki wierzchołek, który jest przodkiem dla obydwóch wierzchołków i który jest jednocześnie najbliżej tych wierzchołków. 4 1 6 5 8 2 7 3 Dla powyższego przykładu najbliższym wspólnym przodkiem wierzchołków 2 i 3 jest wierzchołek 8. Wejście W pierwszej linii znajdują się trzy liczby N, M, P. Liczba N (1<=N <= 10000) oznacza liczbę wierzchołków. W kolejnych M (M<N) liniach znajdują się opisy bezpośrednich potomków opisywanych wierzchołków. Każda linia składa się z numeru wierzchołka Vi, liczby jego bezpośrednich potomków ni oraz listy ni liczb oznaczającymi bezpośrednich potomków. Wierzchołki z zerową liczbą bezpośrednich potomków nie są ujęte w tym spisie. Następne P linii zawiera pary liczb oznaczające wierzchołki, dla których mamy znaleźć najbliższego wspólnego potomka. Są to zawsze numery istniejące w drzewie. Wszystkie liczby są rozdzielane spacjami. Numery wierzchołków są z zakresu od 1 do 10000. Wyjście W kolejnych P liniach liczby będące najbliższymi wspólnymi przodkami dla kolejnych P par z danych wejściowych. Przykład Wejście 843 43158 116 8227 713 23 63 37 Wyjście 8 4 7