#P12017. [NOISG 2025 Finals] Reachability

    ID: 11918 远端评测题 1000ms 1024MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>2025背包 DP树形 DPNOISG(新加坡)

[NOISG 2025 Finals] Reachability

Description

Sheepland 是一个有 nn 座城市的国家。有 n1n - 1 条道路将各对城市连接在一起。第 jj 条道路直接连接城市 u[j]u[j]v[j]v[j]。最初,仅使用这些道路,可以从任意一个城市到达任意一个其他城市。

Sheepland 的所有 n1n - 1 条道路都计划进行翻修。根据翻修计划,每条道路 jj 将处于以下四种状态之一:

  1. 双向:城市 u[j]u[j]v[j]v[j] 的市民可以通过这条道路前往对方的城市。
  2. 从城市 u[j]u[j] 到城市 v[j]v[j] 的单向:只有来自城市 u[j]u[j] 的市民可以通过这条道路前往城市 v[j]v[j]
  3. 从城市 v[j]v[j] 到城市 u[j]u[j] 的单向:只有来自城市 v[j]v[j] 的市民可以通过这条道路前往城市 u[j]u[j]
  4. 关闭:城市 u[j]u[j]v[j]v[j] 的市民都不能通过这条道路前往对方的城市。

不幸的是,翻修计划丢失了!

为了尝试恢复计划,你向每座城市的市长询问在翻修计划下从他们的城市可以到达多少座城市。第 ii 座城市的市长回答 l[i]l[i]。然而,一些市长可能提供了错误的数值。

如果存在一个序列 c1,c2,c3,,ckc_1, c_2, c_3, \ldots, c_k,其中 c1=uc_1 = uck=vc_k = v,并且对于所有 1xk11 \leq x \leq k - 1,都存在一条可通行的道路从 cxc_xcx+1c_{x+1},那么城市 vv 被认为可以从城市 uu 到达。特别地,每座城市都可以到达自身。

请帮助 Sheepland 确定是否存在一个翻修计划,使得每位市长报告的可到达城市数量都是正确的!

Input Format

你的程序必须从标准输入读取数据。

输入的第一行包含一个整数 nn

输入的第二行包含 nn 个以空格分隔的整数 l[1],l[2],,l[n]l[1], l[2], \ldots, l[n]

接下来的 n1n - 1 行输入,每行包含两个以空格分隔的整数。第 jj 行包含 u[j]u[j]v[j]v[j]

Output Format

你的程序必须向标准输出打印结果。

如果存在一个与所有市长报告的可到达城市数量一致的翻修计划,则输出 YES,否则输出 NO

9
5 2 3 5 2 3 1 1 1
1 4
4 5
2 5
3 6
5 6
6 9
7 8
4 7
YES
9
5 2 3 5 2 3 1 1 2
1 4
4 5
2 5
3 6
5 6
6 9
7 8
4 7
NO
7
3 3 1 3 2 1 2
3 4
1 2
6 2
7 3
5 6
4 2
YES

Hint

子任务

对于所有测试用例,输入将满足以下约束条件:

  • 1n50001 \leq n \leq 5000
  • 对于所有 1in1 \leq i \leq n,有 1l[i]n1 \leq l[i] \leq n
  • 对于所有 1jn11 \leq j \leq n - 1,有 1u[j],v[j]n1 \leq u[j], v[j] \leq n
  • 对于所有 1jn11 \leq j \leq n − 1,有 u[j]v[j]u[j] \neq v[j]
  • 最初,仅使用道路,可以从任何城市到达任何其他城市。

你的程序将在满足以下特殊性质的输入数据上进行测试:

子任务 分数 特殊性质
00 样例
11 44 n7n \leq 7
22 55 n15n \leq 15
33 1111 l[1]=l[2]==l[n]l[1] = l[2] = \cdots = l[n]
44 1010 如果存在一个翻修计划,则存在一个这样的计划没有双向道路
55 4545 n400n \leq 400
66 2525

样例 1 解释

此样例适用于子任务 2,5,62, 5, 6

请参考下方的图示。该翻修计划与所有市长报告的可到达城市数量一致。

样例 2 解释

此样例适用于子任务 2,4,5,62, 4, 5, 6

不存在一个与所有市长报告的可到达城市数量一致的翻修计划。

样例 3 解释

此样例适用于子任务 1,2,5,61, 2, 5, 6