摘要: 题意:有N个节点,组成一棵树,1号节点是根节点。每个节点都有一个权值。现在有q个查询,每次查询根节点是U的子树中有多少个不同的权值恰好出现K次。思路:第一眼让人感觉是图论,但仔细分析发现单纯的搜索肯定会超时。这题分为另个部分:1.以u为根节点的子树有多少种不同的权值。2.权值为k的有多少。对于线性列表,查询一个区间有多少个不同的子节点,我们用一个pre[v]记录权值v上次出现的位置。那么当第i个数的权值为v时,区间pre[v]+1-->i这个区间就会多一个不同的数,那么可以用update(pre[v]+1,1)来更新。但是i之后的状态不能改变,故再用一个update(i+1,-1)。这样 阅读全文
posted @ 2013-05-24 12:50 fangguo 阅读(310) 评论(0) 推荐(0) 编辑