T1.树的重量(weight)
给出一棵n个叶节点的树(但是有多组数据)以及n个节点之间的距离(最短距离。。。然而也只有一条路),求树的所有边权之和。
一开始完全没有思路啊。。。难道爆搜模拟??狂汗。。。
然而答案就是构造(枚举啦)。因为n个都是叶节点,那么假设已经安排好了i-1个节点的位置,那么第i个点的连边肯定是从已有的边中连出来的。
如下:若1,2距离为4个单位,1,3距离为5个单位,那么试构就是这样的:
所以可以从3开始一个一个枚举,每次枚举从已经放好的节点中找到扩展节点,扩展出的边权是 (tmp为中间值自行无视)
然后只要把每次扩展的值累加起来就好了(别忘了1,2之间的边权)。
T2.单词查找树(tree)
给出一些单词(每行一个,总计不超过32K),求构成的trie的节点个数。
其实很水,只要模拟构造trie就可以了。只是之前没写过trie所以。。。。
T3.登山(climb)
给出n个数,q次询问,每次问区间l,r的最大值(RMQ)
用st算法很快可以求出来。
不过由于之前没写过st的总结所以还是写一下。
首先,对给出序列求出maxn[i][k],表示的是i开始2^k个数的最大值,枚举k再枚举i就好,具体推导为:
Maxn[i][k]=max(maxn[i][k-1],[i+(1<<(k-1))][k-1])
这样最大值问题就解决了。
那么区间l,r呢?先求k=log2(r-l+1),然后最大值就是
Max(maxn[l][k],maxn[r-(1<<k)+1][k])
然后好了这就是st