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