杂题记录
目錄題目[WC2006]水管局長題面:題解:[FJOI2015]火星商店問題題面題解[USACO13OPEN]陰和陽Yin and Yang題面題解[51nod]1472 取余最大值題意題解CF1137C Museums Tour題面題解
題目
以下題解里面要是有不對的地方歡迎提醒/打臉。
[WC2006]水管局長
題面:
[WC2006]水管局長
題解:
首先根據(jù)一些常識,我們可以發(fā)現(xiàn),符合要求的邊一定在最小生成樹上,因?yàn)橛袆h邊操作,因此我們需要做的就是動(dòng)態(tài)維護(hù)最小生成樹。
因?yàn)閯h邊不好處理,因此我們可以直接倒著處理,這樣刪邊就變成加邊了。
因?yàn)橐S護(hù)邊,因此我們考慮將每條邊都視作一個(gè)帶權(quán)中轉(zhuǎn)點(diǎn)。即對于x --- > y的邊,連x ---> now --- > y,其中now為一個(gè)帶權(quán)點(diǎn)。
同時(shí)如果已經(jīng)構(gòu)成一棵樹,我們要再往里面塞邊的話,就必須要?jiǎng)h掉一條邊,否則會構(gòu)成環(huán)。
因此對于一條連接x ---> y,邊權(quán)為(k)的邊,我們查詢x -- > y路徑上邊權(quán)的最大值(maxn),那么會有2種情況:
(maxn > k),那么說明插入這條邊是優(yōu)的,因此我們刪去最大值所代表的邊,加入當(dāng)前邊
(maxn le k),那么說明保留最大值比較優(yōu),所以我們忽略這條邊,不進(jìn)行修改。
然后就可以了。
[FJOI2015]火星商店問題
題面
[FJOI2015]火星商店問題
題解
觀察到,如果沒有最近d天的限制,那么我們只需要將所有物品按照所屬商店的順序加入可持久化trie樹。
如果我們要查詢商店編號在([ll, rr])之間的最大xor值,那么我們只需要查詢區(qū)間([l, r])內(nèi)的xor最大值即可。
其中(l)表示第一個(gè)屬于查詢范圍內(nèi)的物品編號,(r)表示最后一個(gè)屬于查詢范圍內(nèi)的物品編號。
具體如何獲取這2個(gè)編號?因?yàn)槲锲肥前凑账鶎偕痰觏樞蚣尤氲模晕覀冎恍枰诩尤氲奈锲沸蛄兄卸忠幌戮涂梢粤恕?br />
那么再考慮最近d天的限制。
相當(dāng)于是查詢商店編號屬于([ll, rr]),時(shí)刻屬于([l, r]) 內(nèi)的最大xor值。
我們考慮線段樹分治。
對于每個(gè)詢問區(qū)間,我們將它的查詢時(shí)刻區(qū)間分成log段,掛在線段樹上。
對于每個(gè)物品,因?yàn)槲覀冃枰獙⑽锲钒凑账鶎偕痰甑捻樞蚣尤耄虼藢τ诰€段樹上的每個(gè)區(qū)間,我們都需要重建整個(gè)可持久化trie樹。
不過因?yàn)槲锲肥且粋€(gè)單點(diǎn)修改,因此就算我們在每個(gè)包括了這個(gè)物品的區(qū)間都放一個(gè)這個(gè)物品,每個(gè)物品也最多放log個(gè)。
因此我們在每個(gè)包括了這個(gè)物品的區(qū)間內(nèi)放一個(gè)這個(gè)物品,然后每到一個(gè)區(qū)間,就取出所有在這個(gè)區(qū)間內(nèi)出現(xiàn)過的物品,重建整棵trie樹。
然后對于每個(gè)掛在這個(gè)區(qū)間上的詢問,二分我們需要查詢的物品區(qū)間,在可持久化trie樹上查詢并更新這個(gè)詢問的答案。
最后再輸出即可。
復(fù)雜度是(O(nlog^2n))的
[USACO13OPEN]陰和陽Yin and Yang
題面
[USACO13OPEN]陰和陽Yin and Yang
題解
看上去點(diǎn)分搞搞就可以了?
[51nod]1472 取余最大值
題意
有一個(gè)長度為n的數(shù)組a,現(xiàn)在要找一個(gè)長度至少為2的子段,求出這一子段的和,然后減去最大值,然后對k取余結(jié)果為0。
問這樣的子段有多少個(gè)。
題解
之前做過這題的樹上版本,可以直接套上來做。
我們考慮點(diǎn)分治,因?yàn)槠唇?條路徑時(shí)需要知道最大值是誰,所以不能直接做完個(gè)子樹就放桶。
我們考慮容斥,先求出所有的路徑,按照max從小到大排序,然后每枚舉到一條線段,就減去max然后在桶里面找方案,再加入桶。
但是這樣會有重復(fù),因此我們單獨(dú)求出每棵子樹內(nèi)部互相匹配的方案。然后用總方案減去這部分,就得到了答案。
CF1137C Museums Tour
題面
一個(gè)國家有 (n) 個(gè)城市,通過 (m) 條單向道路相連。有趣的是,在這個(gè)國家,每周有 (d) 天,并且每個(gè)城市恰好有一個(gè)博物館。
已知每個(gè)博物館一周的營業(yè)情況(開門或關(guān)門)和 (m) 條單向道路,由于道路的設(shè)計(jì),每條道路都需要恰好一個(gè)晚上的時(shí)間通過。你需要設(shè)計(jì)一條旅游路線,使得從首都:(1) 號城市開始,并且當(dāng)天是本周的第一天。每天白天,如果當(dāng)前城市的博物館開著門,旅行者可以進(jìn)入博物館參觀展覽,否則什么也做不了,這一天的晚上,旅行者要么結(jié)束行程,要么通過一條道路前往下一個(gè)城市。當(dāng)然,旅行者可以多次經(jīng)過一個(gè)城市。
要求讓旅行者能夠參觀的不同博物館數(shù)量盡量多(同一個(gè)城市的博物館參觀多次僅算一次),請你求出這個(gè)最大值。
題解
如果我們對原圖縮點(diǎn)會怎樣?
每個(gè)強(qiáng)聯(lián)通分量的貢獻(xiàn)會隨著進(jìn)入的時(shí)間而改變。
考慮到(d)不大,可以考慮將每個(gè)城市拆成(d)個(gè)單獨(dú)的點(diǎn),((x, i))表示點(diǎn)(x)在星期i的狀態(tài),再用((x, i)) ---> ((x, i + 1)),然后再縮點(diǎn)。
那么我們會發(fā)現(xiàn),一旦我們可以到達(dá)一個(gè)點(diǎn),并且((x, i))是開啟狀態(tài),那么我們一定可以獲得這個(gè)貢獻(xiàn),因?yàn)槲覀冏?k)到達(dá)的,一定是某個(gè)城市的第(k)個(gè)狀態(tài)。因此我們就可以在新圖上直接跑最長路了。
總結(jié)
- 上一篇: 【matlab-7】Matlab与线性代
- 下一篇: 国内外云服务现状及发展探讨