1. 程式人生 > >neerc訓練記錄

neerc訓練記錄

全部 枚舉 n) Y軸 影響 bfs 是否 就是 統計

[upd 12.18] 老年選手也該看看歐洲的acm了,不然以後就再也沒有機會了

neerc 17

[problem A] 挺牛逼的結論,與y軸平行的直線最多只會經過$O(\log C)$個點,拿一個線段樹維護一下每個x對應哪些圓即可。復雜度$O(n\log n\log C)-O(n)$

[problem B] 對每種圖討論即可

[problem C] 建出一棵dfs樹,假設當前與$1$構成強聯通的集合為$S$,bfs每次找到一個不在$S$中的點指向$S$中點的邊,把不在$S$中的點到根路徑加入$S$即可。復雜度$O(n+m)-O(n+m)$

[problem D]

[problem E] 隨便匹配匹配

[problem F]

[problem G]

[problem H]

[problem I]

[problem J] 考慮枚舉第k大的邊的數值x,把小於x的邊全部修改為0,跑一邊恰好有k個非0邊的最短路,這樣是O(nm^2)的。考慮轉為一般最短路,對於一條路徑,如果其非0邊的數量大於k,那麽顯然有更優的方案被別的數值統計,不會影響答案;如果小於,補足k個數值x後也不影響答案。那麽把非0的權值減去x,那麽最後最短路加上$xk$就是權值$x$的答案,數據會卡spfa。復雜度$O(m^2\log n)-O(m+n)$

[problem K]

[problem L] 按照鏈的長度從大到小排序,這樣就不會出現某個線被後面嚴格包含。掃一遍整條路徑,如果有被搞過的點那麽就是NO,否則把一端為路徑上點的路徑全部取出來,這樣問題就變到了數列上:詢問是否存在x1<y2,x2<y1,按照左端點排序,那個單調棧維護類似括號序列的東西,去掉右端點小於的區間,檢查最後一個區間即可。復雜度$O(n\log n)-O(n\log n)$

neerc訓練記錄