이상한 트리 해싱
시간 제한1초메모리 제한1024 MB
h가 주어질 때 루트 해시값이 h인 서로 동형이 아닌 두 루트 있는 트리를 출력하고, 불가능하면 -1을 출력한다.
문제
트리를 해싱한다면 두 트리가 동형인지 빠르게 확인할 수 있지 않을까?
루트 정점이 존재하는 트리가 있을 때, 트리의 각 정점 의 해시값 는 의 자식 정점 의 해시값 을 사용하여 다음과 같이 계산된다.
이때, 리프 정점의 해시값은 이다.
양의 정수 가 주어질 때, 루트 정점의 해시값이 이고 서로 동형이 아닌 두 트리 를 출력하라.
입력
첫 번째 줄에 루트 정점이 가져야 할 해시값 가 주어진다. ()
출력
첫 번째 줄에 과 의 크기 을 공백으로 분리하여 출력한다. ()
두 번째 줄에 의 번 정점부터 번 정점까지 각 정점의 부모 정점의 번호 을 공백으로 분리하여 출력한다. ()
세 번째 줄에 의 번 정점부터 번 정점까지 각 정점의 부모 정점의 번호 을 공백으로 분리하여 출력한다. ()
번 정점은 루트 정점이다.
서로 동형이 아닌 트리가 여러 쌍 있다면, 그 중 하나를 출력한다.
만약 조건을 만족하는 두 트리가 존재하지 않는다면 첫 번째 줄에 을 출력한다.
힌트
두 루트 있는 트리 가 동형이라는 것은 의 임의의 두 정점 가 주어졌을 때 에서 가 의 부모인 것과 에서 가 의 부모인 것이 필요충분조건인 일대일 함수 가 존재한다는 것이다. 여기에서 와 는 각각 와 의 정점 집합을 의미한다.