흑백조경사

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

요약
색칠된 나무의 각 정점을 뿌리로 삼았을 때 모든 내부 정점이 자손 다수 색으로 칠해지는지 확인하고, 조건을 만족하는 뿌리를 모두 찾는다.
난이도

어려움10점 중 8점

유형
트리, DFS, 구현, 재귀
정답자
아직 제출이 없습니다

문제

민아는 Even한 나무로 정원을 꾸미기로 유명한 조경사이다. 나무는 사이클이 없는 단순 연결 그래프를 의미한다. Even한 나무는 다음 조건을 만족하는 나무이다.

  • 하나의 뿌리 정점을 가진다. 간선으로 연결된 두 정점은 부모-자식 관계를 가지며, 둘 중 뿌리 정점과 더 가까운 정점이 부모이다.

  • 모든 정점은 흰색 또는 검은색으로 칠해져 있다.

    • 자식이 없는 정점은 어떤 색이든 상관없다.
    • 자식이 있는 정점은 모든 자손 정점의 색 중 더 많은 색으로 칠해져야 한다. 즉, 흰색 자손이 더 많다면 흰색, 검은색 자손이 더 많다면 검은색이어야 한다. 흰색 자손과 검은색 자손의 수가 같다면 어떤 색이든 상관없다. 이때, 임의의 서로 다른 두 정점 aa, bb에 대해 aa에서 뿌리 정점으로 가는 단순 경로 사이에 bb가 있다면 aa는 bb의 자손이다.

민아는 HCPC 대회장을 아름답게 꾸미기 위해 NN개의 정점으로 이루어진 나무 한 그루를 뽑아 왔다. 하지만, 대회장에 도착하니 어떤 정점이 뿌리 정점이었는지 잊어버리고 말았다! 어떤 정점을 뿌리로 삼는지에 따라 Even한 나무가 될 수도, 그렇지 않을 수도 있다. 나무를 뽑아 오느라 탈진한 민아를 대신해 뿌리가 되었을 때 나무가 Even해지는 정점을 모두 찾는 프로그램을 작성해 주자.

입력

첫째 줄에 정점의 개수 NN이 주어진다. (2≤N≤200,000)(2\le N\le 200\\, 000)

둘째 줄에 NN개의 정수 C_1C\_1, C_2C\_2, ⋯\cdots, C_NC\_N이 공백으로 구분되어 주어진다. ii번 정점의 색이 흰색이라면 C_i=0C\_i=0, 검은색이면 C_i=1C\_i=1이다.

셋째 줄부터 N−1N-1줄에 걸쳐 나무의 각 간선이 잇는 두 정점의 번호 uu, vv가 공백으로 구분되어 주어진다. (1≤u,v≤N;(1\le u,v\le N; u≠v)u\ne v)

출력

첫째 줄에 조건을 만족하는 정점의 수를 출력한다.

둘째 줄에 조건을 만족하는 모든 정점의 번호를 공백으로 구분하여 오름차순으로 출력한다.

조건을 만족하는 정점이 없다면 둘째 줄은 출력하지 않는다.

예제2

  1. 예제 1

    입력
    10
    0 0 0 1 1 0 1 1 0 0
    6 1
    6 3
    6 5
    6 7
    6 10
    5 2
    5 4
    7 8
    7 9
    
    예상 출력
    4
    1 3 6 10
    
  2. 예제 2

    입력
    8
    1 1 1 0 0 1 0 0
    3 8
    7 1
    6 4
    5 7
    2 4
    8 2
    4 5
    
    예상 출력
    0