原创 BZOJ1145 [CTSC2008]圖騰totem(數學計數+樹狀數組)

【題解】 拜讀了不少網上題解,現在自己來複述一遍 設 f(abcd)爲:當選出的四個數相對大小關係爲abcd時,有多少種選擇方式  則 ans = f(1324) - f(1243) -f(1432) 用拆分法簡此問題  f(1324)

原创 BZOJ1188 [HNOI2007]分裂遊戲(SG定理)

注意: 1. 位運算的優先級低於"==" 2. vis[]的大小不一定等於n,具體多大需實驗得知  3. 初始化的問題  4. Nim遊戲中SG函數

原创 BOZJ2733 [HNOI2012]永無鄉(Treap+啓發式合併)

【題解】 Treap 啓發式合併: 初始時給每個點建一個treap,連邊時啓發式合併,將小的treap的每個結點插入大的treap中,並delete掉多餘結點  【代碼】 #include<stdio.h> #include<stdl

原创 BZOJ3211 花神遊歷各國(樹狀數組+並查集)

【題解】 查詢很容易做到O(logN) 修改時注意: 第i位上的數a[i] -> sqrt(a[i]),最多執行30次,當a[i]==1後,可以不修改,直接跳過  跳到之後第一個大於1的位置上去,這個位置可以用並查集維護  由於每個點最被

原创 BZOJ246 [中山市選2009]誰能贏呢?(討論奇偶性)

題意: 給定一個n*n的棋盤,一個石頭被放在棋盤的左上角。兩人輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格 子之前不能被訪問過。誰不能移動石頭了就算輸。問最後誰能贏?考慮n的奇偶性: 偶數個格

原创 [NOI2014]起牀困難綜合症(二進制拆分+貪心)

【題解】 還是老思路:二進制位運算的題,我們單獨考慮每一位,最後合併答案  這道題中:在0~m中選一個數"丟"到那一堆運算裏,相當於判斷從每一二進制位"丟"下去0或1後,得出的結果中高位儘量是1的方案  爲了方便,我們直接丟兩個數:000

原创 BZOJ1875 [SDOI2009]HH去散步(矩陣乘法)

【題解】 小規模圖的連通性問題,可以用鄰接矩陣+快速冪求解  本題唯一特殊的一點就是: 不能沿着剛剛走來的路走回,注意:不是不能走重邊,而是不能反向走剛剛走過的邊  處理方法是將無向邊拆成兩條有向邊,互換點與邊的地位,即:將兩條有向邊按是

原创 BZOJ1030 [JSOI2007]文本生成器(AC自動機+dp)

【題解】 與poj2778有類似之處,只不過本題模板串太長,無法用到矩陣,而文本較短,適於dp ans = 26^m - 不含任意單詞的文本數  不含任意單詞的文本數 的求法: 轉化成從有向圖的一點出發,走n步到達另一結點的方案數  本

原创 [NOI2009]植物大戰殭屍(最大流)

我冒着明天困屎= = 的危險寫了這道題和題解 【題解】 最大權閉合子圖模型,注意同一排裏面的植物可以保護外面的 若A能保護B,就連邊 A->B,容量無窮大,將s與所有正權點相連,所有負權點與t相連,容量都爲點權的絕對值 還要注意若A,B

原创 BZOJ1044 [HAOI2008]木棍分割(二分答案/單調性優化dp+遞推優化)

我要吐槽,因爲我被這題坑了一個晚上 看網上的博客都寫了二分答案的解法,可偏偏我就用了斜率優化dp的分析思路 “設f[i][j]:前i個數分j段的最小值 ……” 竟然還分析出來了。。。 無奈各種諸如<,<=這樣的邊界情況巨坑,導致我推了一頁

原创 [NOI2004]鬱悶的出納員(Treap)

【題解】 Treap水過 注意:對於null結點,不能進行 o->s = o->ch[0]->s + 1 + o->ch[1]->s 操作,一定要考慮此問題 【代碼】 #include<stdio.h> #include<stdlib.

原创 [NOI2014]魔法森林(動態加邊+SPFA)

【題解】求兩個變量構成的最優值,可以考慮限制一個變量,最優化另一個假設已知答案中的Ai的最大值不超過x,只需最小化1到n路徑上的Bi的最大值 這是一個最短路問題,即,設d[i]爲:只考慮Ai<=x的邊,從1到i的路徑上BiMax的最小值。

原创 BZOJ3172 [Tjoi2013]單詞(AC自動機+打標記)

剛開始把題意理解錯了囧 題意:給定n個字符串,求每個字符串在其他字符串中出現的次數之和  【題解】 首先肯定要建立AC自動機  暴力算法: 以每個詞爲文本串做匹配,每匹配上一個位置,就從該節點延fail或last數組上溯,給經過的的詞尾

原创 [NOI2014]動物園(kmp+遞推)

【題解】 這裏首先定義失配指針f[i]滿足:第i個位置的字符與第f[i]位相同,字符數組從1開始  如:aba f[1]=0,f[2]=0,f[3]=1  要求出num[i],只需延f指針上溯,找到所有長度不超過i/2的位置,它的數目即爲

原创 BZOJ1854 [Scoi2010]遊戲(並查集/二分圖匹配)

一題多解,挺不錯的題 解法一:並查集 【題解】 將一個裝備抽象成一條邊,它連接着編號爲其屬性值的兩個結點  這樣,取裝備等價於取邊; 每個裝備只能用一次,等價於在每條邊上僅能取一個端點  因此,連好所有的邊,構成一個個連通塊,它們產生了