|
||||||||||
回文树Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total Submission(s): 463 Accepted Submission(s): 132 Problem Description 给定一棵$n$个点的树,任意两点之间有且仅有一条直接或间接路径。这些点编号依次为$1$到$n$,其中编号为$i$的点上有一个正整数$a_i$。你可以认为每个数$a_i$都是在$[1,n]$里等概率随机挑选的。 令$S(u,v)$表示在树上$u$到$v$的唯一最短路径上,按照离$u$从近到远依次考虑每个点,将它们上面的数字$a$按顺序写下连成的字符串。若一个字符串正着读和倒着读相等,则称它为回文串,比如1 2 1和1 3 3 1是回文串,但是1 21不是回文串。 请写一个程序,统计有多少个正整数对$(u,v)$满足$1\leq u\leq v\leq n$,且$S(u,v)$是回文串。 Input 第一行包含一个正整数$T(1\leq T\leq 20)$,表示测试数据的组数。 每组数据第一行包含一个正整数$n(1\leq n\leq 100000)$,表示点数。 第二行包含$n$个正整数$a_1,a_2,...,a_n(1\leq a_i\leq n)$,依次表示每个点上的数字。你可以认为每个数$a_i$都是在$[1,n]$里等概率随机挑选的。 接下来$n-1$行,每行两个正整数$u_i,v_i(1\leq u_i,v_i\leq n,u_i\neq v_i)$,表示一条连接$u_i$和$v_i$的双向树边。 Output 对于每组数据,输出一行一个整数,即满足条件的点对$(u,v)$的数量。 Sample Input
Sample Output
Source | ||||||||||
|