멀지만 가까운 사이

시간 제한3초메모리 제한1024 MB

요약
가중치 트리에서 두 정점을 잇는 경로 위 간선 거리들의 XOR이 0인 서로 다른 정점 쌍의 수를 센다.
난이도

보통10점 중 6점

유형
트리, DFS, 누적 합, 비트 연산
정답자
아직 제출이 없습니다

문제

숭고한 동네에는 NN개의 마을이 있다. 마을들은 N−1N-1개의 도로로 연결되어 있고, 도로는 항상 두 마을을 직접 연결하며, 모든 마을이 연결되어 있어 전체 구조는 하나의 트리†이다. 각 도로에는 마을과 마을 사이의 거리가 적혀 있다.

문성이는 모든 마을 쌍 중에서 특별한 관계를 가지는 쌍들을 찾고자 한다. 문성이는 다음과 같이 정의된 마을 쌍을 멀지만 가까운 사이라고 부른다.

  • 두 마을 uu, vv 사이의 경로를 따라 도로의 거리 값을 전부 XOR 했을 때, 그 결과가 정확히 00이 되는 경우

문성이는 궁금해졌다. 이런 특별한 관계를 가진 마을 쌍이 총 몇 쌍이나 존재할까?

단, (u,v)(u, v)와 (v,u)(v, u)는 같은 쌍으로 간주하며, u≠vu \ne v인 경우만 센다.


† 트리는 NN개의 정점과 N−1N-1개의 간선으로 이루어진 무방향 연결 그래프이다.

입력

첫째 줄에 마을의 수 NN이 주어진다. (2≤N≤500,000)(2 \le N \le 500\\,000)

이어서 N−1N - 1개의 각 줄에는 ii번째 도로가 잇는 두 마을 u_iu\_i, v_iv\_i와 거리를 나타내는 정수 w_iw\_i가 공백으로 구분되어 주어진다. (1≤u,v≤N; 0≤w≤109)(1 \le u, v \le N;\ 0 \le w \le 10^9)

출력

첫째 줄에 멀지만 가까운 사이를 이루는 마을 쌍의 수를 출력한다.

힌트

두 수의 XOR 연산은, 두 수를 이진수로 나타냈을 때 각 비트 자리에서 서로 다르면 11, 같으면 00이 되는 비트 연산이다. 예를 들어, 66과 44를 이진수로 나타내면 각각 110_(2)110\_{(2)}, 100_(2)100\_{(2)}이 되고, 두 수를 XOR한 값은 010_(2)010\_{(2)}으로 22가 된다.

예제2

  1. 예제 1

    입력
    4
    1 2 3
    2 3 4
    3 4 7
    
    예상 출력
    1
    
  2. 예제 2

    입력
    5
    1 2 1
    1 3 2
    3 4 3
    3 5 0
    
    예상 출력
    2