這道題我用了一個很神奇的操做完成了。優化
首先,這道題咱們使用二分。判斷有無解。鏈接全部邊權小於等於\(mid\)的邊,判斷全部點是否互相可達。spa
實際上若是全部點都能到達\(1\),而且\(1\)能到達全部點,則說明全部點互相可達。隊列
這道題我使用樹上倍增。class
固然,咱們首先先考慮維護\(suma[u]\)和\(sumb[u]\)表明從該點到根節點的全部權值和。發現咱們還能夠維護\(prob_a[u]\)和\(prob_b[u]\)用以計算從該點\(u\)到根節點的全部\(a_i*b_j\)。而後分別維護。數據
對於\(u,v\),答案即爲:di
這道題啓發我能夠利用維護序列上的操做維護樹上較難處理的操做。思維
最後,別忘開long long!display
題意中有一句話:一個長度不超過k的區間染成相同的顏色,指的是一個(考場期間我就覺得是多個)。數字
首先\(k=1\),互不相同。DP帶走;math
其次,咱們能夠枚舉每個長度不超過\(k\)的子串,分別計算。
接着剛纔的想法,咱們能夠不妨優化一下:預處理DP,接着單調隊列。
題目好評,思惟難題。
一看數據規模,再看好數的定義,第一想法就是旅行商問題。
轉移過程當中花費貌似挺難想的。咱們把每個\(k\)位數看做一個節點,花費即爲節點距離。跑最短路。
舉個例子:\(1234\)能夠向\(2341\)、\(2342\)、\(2343\)、\(2344\)(這四個數若是都不是不知足題意的數據)連邊。