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