트리와 XOR 쿼리
시간 제한4초메모리 제한1024 MB
루트가 있는 가중치 트리에서 간선 가중치 갱신을 처리하며, 각 질의마다 subtree(x)의 a와 subtree(y)의 b에 대한 경로 xor d(a,b)의 합을 출력한다.
문제
1번 노드를 루트로 하고 간선에 가중치가 있는 트리가 주어진다. 모든 노드의 번호는 이다. 두 노드 , 에 대하여 에서 로 가는 단순 경로 위의 모든 가중치를 xor한 값을 로 정의하자. 이면 이다.
다음 두 쿼리를 수행하는 프로그램을 작성하시오.
1 : 번 노드에서 번 노드의 부모로 가는 간선의 가중치를 로 바꾼다.
2 : 의 서브 트리에 속한 임의의 정점 와 의 서브 트리에 속한 임의의 정점 에 대하여, 모든 값의 총합을 출력한다.
입력
첫째 줄에 트리의 노드 개수를 나타내는 정수 이 주어진다.
둘째 줄부터 개의 줄에는 간선에 대한 정보를 나타내는 정수 가 주어진다. 이는 최초의 트리에서 번 노드와 번 노드를 잇는 간선의 가중치가 임을 나타낸다. , ,
다음 줄에는 쿼리의 개수를 나타내는 정수 가 주어진다.
다음 개의 줄에는 한 줄에 하나씩 다음과 같은 형식 중 하나로 쿼리가 주어진다. 주어지는 모든 입력은 정수이다.
- 1 ,
- 2
2번 쿼리는 한 번 이상 주어지며, 와 가 같을 수 있음에 유의하라.
출력
각각의 2번 쿼리의 결과를 순서대로 한 줄에 하나씩 출력한다.
힌트
xor 연산은 아래 링크에서 확인하자.