URAL1069
来源:互联网 发布:幸运抽奖软件作弊 编辑:程序博客网 时间:2024/06/02 21:52
一个节点在Prufer编码中出现几次,说明有几个子节点。
不出现说明是叶子节点。
保存各个节点的子节点数count[].
建立一个叶子节点集合leafs。leafs需要保持有序,可以使用java中的TreeSet
算法步骤:
遍历Prufer编码,取出当前值father
取出所有叶子节点leafs中的最小值min,其父亲就是father节点,保存两者关系
count[father]减一,如果count[father]==0,将father加入leafs
leafs.remove(min);
关键代码:
for (Integer father : Prufer) {Integer min = leafs.first();ADJ[min].add(father);ADJ[father].add(min);leafs.remove(min);count[father]--;if (count[father] == 0) {leafs.add(father);}}