6月題目彙總1(6.6---6.13)
阿新 • • 發佈:2019-01-03
6.6上午
NO.1 來源 : UVa 1318 Monster Trap
分類: 計算幾何,平面直線圖
簡要題解:
- 首先從所有線段的端點中出不在任何一條線段(端點不算)上的點的集合S,再加上
(0,0),(inf,inf) 這兩個點。 - 對於
S 中的兩個點a,b ,如果線段a,b 不和任何給出的線段相交,那麼給a,b 連上邊。 - 但這樣會線上段的公共端點處出現問題,解決的方案是把每條線段延長一點點,使原先有公共端點的線段相交。
- BFS判斷
(0,0)→(inf,inf) 是否聯通即可。
反思:
- 注意伸長量
delta與eps 的大小關係,取delta=10−5,eps=10−10 可以過。 - 複習:判斷線段相交,點線上段上。
6.6晚
NO.2 來源 : UVa 1340 Find the Border
分類: 計算幾何,平面直線圖(PSLG)
簡要題解:
- PSLG模板。題解請看LRJ的白皮書。
反思:
- 對點進行排序時的浮點比較要用dcmp()。
6.8上午
NO.3 來源 : BZOJ 4184 shallot
分類: 分治,線性基
簡要題解:
- 求一堆數可以異或出來的最大值,顯然可以用線性基。
- 有刪除操作怎麼辦?對時間進行分治,具體來說:
- 用一個類似線段樹的結構,每個節點用一個vector存下對這個整個區間有貢獻的數。
- 最後遍歷這棵樹,走到葉子節點就可以回答對應的詢問。
- 線性基要當引數逐層傳遞,不能用一個全域性變數。
反思:
- Hash大法好(比stl快至少一倍)。
- 但是要維護的東西比較麻煩(不像線性基可以當引數傳遞怎麼辦)?
6.8上午
NO.4 NKOJ 4140 ces
分類: 無向圖的連通性
簡要題解:
- 先考慮
k=1 的情況
- 如果是一棵樹,那麼答案就是直徑的長度。
- 否則,將環縮成一個點之後形成的新的樹的直徑。
- 取新樹的重心,可以保證樹高為
logn 級別。 - 顯然加入一條邊可以使某條路徑上的邊全部變成不是橋,肯定貪心的選擇最長的路徑。
- 用一個堆維護所有的由橋邊構成的單鏈(為了避免重複計算,路徑應該被拆解成為單鏈)。
反思:
- 從樹到圖的橋樑——把環縮成點(也就是選代表節點,可以用並查集實現)。
- 從
k=1 到一般情形的轉化——貪心+巧妙的討論和維護路徑。
6.8上午
NO.5 來源 : Codeforces Round #418 (Div. 2) E - An unavoidable detour for home
分類: dp,組合數學
簡要題解:
- 可以發現最後的圖一定形成類似樹的結構,只不過同層之間可以連邊。
- 考慮逐步加入一個點
x (已經有x−1 個點),設當前的層數為l :
- 如果
l−1 這一層還有多餘的度數,x 號點必須接在l−1 層的點下面,否則可以另起一層。
- 如果
- 令
f(x,p1,p2,c1,c2) 表示加入x 個點,l−1 層上剩餘1度、2度的點分別有p1,p2 個,l 層上剩餘1度、2度的點分別有c1,c2 個的方案數。
- 答案為
f(n,0,0,0,0) ,時間複雜度O(n5)
- 答案為
反思:
- 轉移比較多,每一種考慮清楚。特別是另起一層的時候容易錯
6.10上午
NO.6 來源 : BZOJ 4205 卡牌遊戲
分類:網路流
簡要題解:
- 暴力構圖+匈牙利演算法複雜度可以得到35分.
- 考慮到按照匹配建圖邊數過多,我們採用將邊分類的方法優化。
- 考慮a項屬性值能被x整除且b項能力值能被y整除的所有點,只要是在兩側一定能夠匹配,所以我們在匹配的網路流模型中間增加一排這樣的點,滿足要求的左右點分別與它相連,邊權為正無窮。
- 考慮到x和y只需是質數,這樣的點共有至多3*46*46個(1~200質數共46個),而200<2*3*5*7,所以兩側每個點至多連出3*3*3條邊。
- 於是我們構成了一個70000個點,2000000條邊的網路流,依然是分層圖,所以dinic有極佳的速度優勢,通過100分資料。
反思:
- 找到題目和最大匹配的相同性,利用特殊性來優化。
- 匹配在網路流上的表達就是兩行點聯通。
6.10下午
NO.7 來源 : BZOJ 4206 最大團
分類:計算幾何,區間問題
簡要題解:
- 對於每一個點,向圓作兩條切線,切點之間的弧可以用一個極角區間
[li,ri] 來表示。 - 兩個點
i,j 可以連邊等價於[li,ri]與[lj,rj] 相交併且不包含。 - 對極角區間排序之後,考慮從每一個點
i 開始i→n 能組成的最大團:
- 對每一個滿足
lj∈[li,ri],rj>ri 的j(i<j≤n) ,將rj 加入佇列Q。 - 求Q的最長上升子序列即可。
- 對每一個滿足
反思:
- 如果採用到圓心的距離作為連邊的判斷依據,就不能轉化為區間的問題,也沒有很好的利用題目條件。