1. 程式人生 > >2017暑假訓練國慶小假期總結

2017暑假訓練國慶小假期總結

  這個假期主要看完了所有網路流的知識點,看了一點簡單的建模例子,複習了一下逆元包括快速冪求大數的n次方,然後補了補樹狀陣列和線段樹的題。

  對於網路流最後一個知識點,就是有上下界的網路流,所謂上界,就還是以前的邊權的最大值,不過難度增加在加了一個邊權值的最小值。也就是流過某個邊的流量不能低於最小值,也不能超過最大值。解決這類題的思路是把有上下界的最大最小值問題轉換成為一般的網路流問題求解。兩者的最大區別在於,一般的網路流演算法規定初始的流量是0,這樣在有上下界的網路流問題的求解中是不對的。這樣就引入了一個新的概念,也就是必行弧,他的權值等於流值的下限。然後網路流就被拆分成兩個部分,一個是必行弧,一個是最大值於最小值差值構成的邊。單並不能保證每次都能走必行弧,所以構造了一組虛擬源匯點,所有必行弧的起點到虛擬源點有一條邊,同時虛擬匯點到每個段的終點都有邊。然後虛擬的源匯點之間有一條權值為證無窮的邊,這樣就構造了一個等價的網路,並且從虛擬源點到虛擬匯點的網路流一定經過可行弧。這個網路流可以執行一次判斷,若該網路流的最大流等於所有下限之和,那麼,原網路的最大流存在,然後去掉所有與虛擬源匯點之間的連邊,做一次最大網路流的求算即可得到最大流。

  而後看了幾個建模的題目,發現並不是都像一開始那樣簡單,尤其有的網路流需要拆點,有時候不拆就是錯的,僅憑兩個題目我也只是能記住這一小類,總結不出來大的規律,可隱隱感覺有一些規律,和通路有關係。後面通過看部落格腦補思路。

  對於樹狀陣列的題目,我感覺略有進步,以前看這樣的題目是一頭霧水,現在發現多想想還是能模擬出來這個場景的,不過有時候可能有一定的偏差,但至少能從一個看似毫無關聯的題目裡面提煉出這個模型了。然後對於這方面知識點的進步也就是了解了一下離線處理。其實離線處理就是輸入完了,把每次詢問按要求處理之後再進行求解,而線上就是輸入的時候就可以同時進行操作,或者輸入完了直接操作,並不用做任何的處理。

  對於線段樹,感覺簡單的題還是簡單,就是個模板,最多就是比如像lazy標記那樣的模板,亦或是二維的那樣的模板,它複雜,但只要瞭解了,就是不難,沒有什麼特別的技巧可言。但難的題目是真的難,和樹狀陣列一樣,需要提煉背景中的模板,或者更難的,當工具優化dp,這樣的都需要深刻的理解,尤其那個man down,雖說看了部落格裡面就是一個類似層數的一個線段樹處理,本來從一迴圈到i的一個超級費時的dp瞬間只需要兩次就能搞定,理解的沒有那麼深刻,所以並不能通過自己用紙筆簡單的執行一遍就知道為什麼可以完成這樣的替代。但這確實有些高階,是靠背題背不住的技巧。

  今後的這兩週看看網路流的部落格,還有二分圖,這個在很多網路流的題目裡都作為工具被使用,所以最少得達到了解會用。然後總結一下以前的數學知識。