ccf#ZJOI2016F. 随机树生成器

随机树生成器

题目描述

小 Y 最近有了一个随机数生成器 (random number generator)。小 Y 想用这个随机数生成器生成 nn 个节点的树。树为一种没有环的无向连通图。

经过小 Y 的研究,她发现了 44 种随机树生成方法。

第一种方法为首先生成一个 11nn 的全排列 p1,p2,,pnp_1,p_2,…,p_n。接着对于所有的节点 i(2in)i (2 \leq i \leq n),由 pip_ipjp_j 连一条边,其中 jj11i1i-1 中的随机整数。

第二种方法为首先生成一个 11nn 的全排列 p1,p2,,pnp_1,p_2,…,p_n。接着对于所有的节点 i(2in)i (2 \leq i \leq n),由 pip_ipjp_j 连一条边,其中 jji2\lfloor \frac {i}{2} \rfloori1i-1 中的随机整数。

第三种方法为首先有一个 nn 个点的图,里面没有边。接着等概率地随机生成点对 u,vu,v ,如果当前图中 u,vu,v 不连通,那么将边 (u,v)(u,v) 加入到图中。重复这个过程,直到这个图连通为止。

第四种方法为在所有 nn 个点的不同的有标号的树中,等概率地随机选取一棵树。两个树是不同的当且仅当存在一条边 (u,v)(u,v) 只出现在其中一棵树中。比如 (1,2),(1,3)(1,2),(1,3)(1,2),(2,3)(1,2),(2,3) 是两棵不同的树。

小 Y 用这四种方法生成了很多棵 nn 个节点的树,但她忘记了这些树分别由哪种方法生成的。你能帮帮她辨认这些树由哪种随机方法生成吗?

在这个题目中令 n=1000n=1000,也就是小 Y 生成的树的节点个数都为 10001000

输入格式

第一行包含 11 个正整数 TT,表示是第 TT 组测试数据。

接下来一个正整数 mm,表示有 mm 棵树。

对于每棵树,共 n1n-1 行。每行包含 22 个正整数 u,vu,v,表示这棵树中有一条节点 uu 与节点 vv 之间的边。

输出格式

输出共 mm 行,每行一个 1144 之间的正整数,表示这棵树随机生成的方式。

数据范围与提示

对于所有的测试数据,保证输入的树是由上述四种方式随机生成。 各测试点满足以下约定:

测试点 mm 约定
11 =2000=2000 只会出现第 1,21,2 种生成方式
22 =3000=3000 只会出现第 1,2,31,2,3 种生成方式
33 只会出现第 1,3,41,3,4 种生成方式
44 =4000=4000
55

对于每个测试点,保证每种可能出现的生成方式恰好出现 10001000 次。

评分方式

对于每个测试点,有 1010 个评分参数 a10,a9,a8,,a1a_{10},a_9,a_8,…,a_1

如果你的输出中错误的答案个数为 xx, 那么你将获得 2s2s 的分数,其中 ss 为满足 xasx \leq a_s 最大的整数。如果 x>a1x>a_1,那么你将获得 00 分。

如果输出格式有异常你将同样获得 00 分,请确保你的输出中共有 mm 行,每行为一个 1144 之间的正整数。

对于每个测试点的具体评分参数见附加文件中的 scores