Codeforces Round #808 A~D

A

結論:假設在某個位置q減1了,則後面要全選(被痛擊之後失去理智
證明:如果後面某個位置沒選,則可以把第一個q-1的位置和其交換一下,中間的至少+1,後面的不一定-1,極限情況也是中間+1後面不變,一定不劣
由於第一個-1取決於q,所以這些位置一開始都是固定的,在這些位置往前擴展不減1的就會得到所有後綴,即答案一定是由 一段後綴+前面所有不減1的 構成
二分後綴長度,暴力判斷

B

神必題
暴力顯然會掛
但是發現有Σai<=5e5的神奇限制,所以暴力的時候不做ai=0的就可以了,每操作x個數時Σai至少減(x-1),所以時間是O(Σai*log)的
其實這只是隨便估的,實際的複雜度低得離譜,詳見https://codeforc.es/blog/entry/104930?#comment-932884,跑n=1e5,ai=1e18似乎不成問題

C

先求出mst,dfs時不能走不在mst裏的邊,分別記作白邊和黑邊
對於某一條黑邊,不妨先假設其他黑邊不存在,即在走到它之前都只能走白邊,這樣沒有問題,因爲如果走了其他黑邊那也會掛,在判其他黑邊時會考慮到
(要嚴謹的話可以先求出做法再證明必要性,咕)
由於dfs能走就走的性質,發現不合法的點就是u-v鏈上其他的點以及其連出去的子樹,圖見https://blog.csdn.net/xin_jun/article/details/125827808
實際就是除了以u爲根的v子樹和以v爲根的u子樹外的點全部不合法,對每個(u,v)都考慮一下就ok了,覆蓋用lca判斷+子樹標記

D

Chinese Round傳統藝能
問題等於給每個點賦一個最晚保留時間,要求合法
發現不合法當且僅當存在某個點,其保留時間爲t,且有兩個不同子樹中都含有至少一個>t的點
換言之,合法的情況就是最多有一個子樹裏有>t的,其餘都是<=t(注意最後一步爲U={1},所以點1要比其他的都大)
這樣就可以把問題下放到子樹裏了,設f[i,j]表示以i爲根,子樹時間<=j的方案,最後二項式反演變爲恰好1~j
轉移枚舉j,枚舉根i選的k,再順序dp每個兒子,選一個放f[son,j]其餘放f[son,k],這樣對於所有都<=j的會多算(兒子個數-1)次,減掉
這樣做是O(n^3)的,由於j是兒子的前綴*兒子的後綴再取前綴和得到的,所以前綴積後綴積再前綴和就可以O(n^2)了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章