掃描線演算法線上段樹中的應用

可能是沒怎麼搞計算幾何的知識,至今對掃描線演算法沒有很清晰的認識,記得當初ZY大神是這樣定義的:           

0-1分數規劃問題

0-1分數規劃問題是指求出解集{xi|xi=0或1}使目標(c1x1+c2x2+...+cnxn) /(d1x1+d2x2+…+dnxn)=cx/dx達到最大。對於分數規劃問題,有許多演算法都能利用下面的線性目標函數解決問題。        Q(L): 最小化 cx-Ldx  xi∈{0,1}記z(L)為Q(L)的最值。令x*為分數規劃的最優解,並且令L*= (cx*)/(dx*)(註:分數規劃的最值)。那麼下面就容易知道了:    z(L) > 0   若且唯若   L<L*   

Tarjan離線演算法求LCA小結

求LCA的兩種做法不多解釋,這篇文章有詳細解釋。以前以為轉RMQ法求LCA可以取代tarjan,實則不然,Tarjan不僅效率更高,而且可以維護一些路徑上的統計量。於是又離線Tarjan法做了一些題目。比較經典的是SPOJ 3978 Distance Query,是高效求解次小產生樹的基礎,詳見《擴充Tarjan求解樹上兩點路徑上的最長邊》poj 3728 The

sgu 438 The Glorious Karlutka River =)(動態網路流)

題意:m個人在一條寬度為w的河的南岸,現在要到對岸,已知河中有n塊石頭,每塊石頭同時只能容納ci個人,每個人一次都可以跳向距離為d的距離,每次跳躍耗時為1,問m個人全部過河所要花費的最少時間。解法:不難看出此題具有網路流的各個因素。源-南岸,匯-北岸,中間點-石頭,邊-距離小於d的石頭之間的連線,費用-1,但是m個人可以分多次過河且可以在中間節點停留,因此不可用費用流解法。由於不同時刻兩點之間的流量不同,因此不能用一個網路表示整個過程。動態流的兩個基本問題是:“給出時間限制求最大流量”和“給出流

spoj 3196 Divisibility Relation(最大獨立集輸出方案)

題意:給出200個數,選出最大的子集,使得子集中的數相互不整除。解法:將可以整除的點連邊,看上去像是個無向圖最大獨立集,通過求最大團的辦法求解複雜度hold不住。於是觀察圖的特點,由於整除是一種偏序關係,因此構成的是一個有向非循環圖,因此也是個二分圖(二分圖的一個充分必要條件是無奇圈),於是可以轉化為求解二分圖的最大獨立集。具體做法Matrix67給出了證明過程,這篇文章裡有http://blog.csdn.net/kksleric/article/details/7465804。public

有上下界限制的網路流

定理及模型參見《一種簡易的方法求解流量有上下界的網絡中網絡流問題》詳細構圖過程及證明參見《Amer圖論總結》1.最簡單的是求無源匯點的圖的可行流。若存在可行流,由於每條弧的流量都要大於下限,因此可以將每條弧拆為流量為low的和一條流量為up-low的,稱前者為必要弧增加一個附加源x,一個附加匯y,每條有向必要弧(u, v),添加(u, y),(x, v),容量為low。這樣就建立了一個等價的網路。附加源x到附加匯y的最大流,能使得x的出弧或者y的入弧都滿,充要於原圖有可行流。sgu194 rea

hdu 3225 Flowers Placement(字典序第k小的完美匹配)

題意:用n個元素填滿一個m行n列的矩陣,使得每行和每列中每個元素僅出現一次,現要再添加一行,使得矩陣仍滿足上述限制,問字典序第k大的方案是什麼.解法:錯誤的解法是填k次,每次填最小的,若仍存在解則第k次的填充方案就是字典序第k小的,例如原有1234,第一次填2143第二次填3412不死後第二小的。樸素的做法的dfs全排列然後驗證,這樣顯然複雜度太高,於是考慮利用二分匹配剪枝:當遞迴到第i層,即第i列填充上某個元素x後,若x之後的位置和剩餘的元素不能形成完美匹配則不必繼續向下遞迴,這樣驗證的複雜度

HDU3397 Sequence operation(線段樹)

點擊開啟題目連結,還有一個類似的題,只進行01翻轉操作和最大連續查詢,HDU3911 Black And White對一個數列進行如下操作:Change operations:0 a b change all characters into '0's in [a , b]1 a b change all characters into '1's in [a , b]2 a b change all '0's into '1's and change all '1's into '0's in [

poj 2843 Cutting Cake

題意:一塊N*N大的蛋糕M次訊問,每次切走一個矩形,問每次切的矩形被分成了多少塊(1 <= N <= 1000, 1 <= M <=

二分匹配總結

相關題目:http://blog.csdn.net/kksleric/article/details/7433909最大匹配匈牙利演算法:對於增廣路徑可以用一個遞迴的方法來描述。這個描述不一定最準確,但是它揭示了尋找增廣路徑的一般方法:“從點A出發的增廣路徑”一定首先連向一個在原匹配中沒有與點A配對的點B。如果點B在原匹配中沒有與任何點配對,則它就是這條增廣路徑的終點;反之,如果點B已與點C配對,那麼這條增廣路徑就是從A到B,再從B到C,再加上“從點C出發的增廣路徑”。並且,這條從C出發的增廣路

hdu 3873 Invade the Mars(自寫堆最佳化Dijkstra)

題意:以城市1為出發點,城市n為目的地,有若干條限制:要首先攻佔城市a才能攻佔城市b,問攻佔城市n所需的最短時間。從源點到任意一點的最短路受兩個條件的限制:一是源點到自己的最短路,而是源點到限制點的最短路,即限制點最短路f[c] = Math.max(f[c], d[a]);最短路d[c] = Math.max(d[c],

poj 2793 Cactus(無向仙人掌圖判定)

有向Cactus圖:1.它是一個強連通圖。2.它的任意一條邊都屬於且僅屬於一個環。有向Cactus圖判定:性質1 有向Cactus的DFS樹沒有橫向邊(不等價於非父子邊)。性質2 low(u)<=dfn(v) (u是v的兒子)性質3 設某個點v有a(v)個兒子的low值小於dfn(v),同時v自己有b(v)條逆向邊。那麼a(v)+b(v)<2。這三條性質也就是一個有向圖是有向Cactus的充要條件。詳細的證明請看《cactus

URAL 1701 Ostap and Partners(差統計量的並查集)

題目大意:幾個人在談論他們的工資, 他會告訴你很多句話, 每句話是 a 比 b 多 c 塊錢. 已知沒有人的工資低於0或高於 10^9.  第一個人工資是0。 問從第幾句話開始你可以判斷有人在吹牛.如果沒人吹牛輸出每個人的工資。解法:維護每個節點到根節點的差,判矛盾的方法類似於普通的種類並查集。最後還要判如果以上描述正確是否一定有人的工資超出了範圍(這種矛盾只有可能在所有關係都給出後才能判斷,中間無法判斷)。因為第一個人的工資一定,因此會頂合并是總讓標號小的做根節點,這樣就可以固定第一個人的值。

樹狀數組專輯

樹狀數組是一個優美小巧的資料結構,在很多時候可以代替線段樹。樹狀數組的本質就是一種通過二進位位來維護一個序列前i和的資料結構。(詳見論文或http://old.blog.edu.cn/user3/Newpoo/archives/2007/1712628.shtml)樹狀數組按照維數分為1維和2維,按照類型分可以分為插點問段和插段問點,這兩個互逆,只是改變for迴圈的方向就可以了。一般以插點問段較為常見,對於查點操作,只需查詢前n項和及前n-1項和,便可得到第n項的值插段問點轉化為插點問段:設A[

poj 2890 Matrix Multiplication

題意:對一個對焦線元素為1、k*k的01矩陣在布爾運算的意義下進行2006次冪運算(k<1000 )。求得到的矩陣裡有幾個1。解法:由於是布爾意義下的運算,k次矩陣乘相當於長度為k的路徑個數,由於2006>k,因此可以看做求一個圖的傳遞閉包。可以首先強連通分量縮點,記錄每個強連通分量中的點數,在縮點後的圖G ‘上對每個點進行一次dfs,求出此連通分量能到達多少個點,累加每個強連通得到總共有多少條路徑。import java.io.*;import

線段樹和單調隊列最佳化DP—POJ2373解題報告

在長為L(<=1000000)的草地(可看成線段)上裝噴水頭,噴射是以這個噴水頭為中心,噴水頭的噴洒半徑是可調節的,調節範圍為[a,b]。要求草地的每個點被且只被一個噴水頭覆蓋,並且有些連續區間必須被某一個噴水頭覆蓋,而不能由多個噴頭分段完全覆蓋,求噴水頭的最小數目。很容易想到,這可以用dp解決,定義dp[i]為覆蓋[0,i]區間所需的的最小噴頭數,則dp[0]=0,dp[i]=min{dp[i-2*b]....dp[i-2*a]};因為噴頭是向兩邊噴洒的,所以一個噴頭覆蓋的區間長度一定是

幾種特殊的產生樹

1.(嚴格)次小產生樹解法:1.依次刪除樹上的邊後求最小產生樹,判產生樹唯一時只需刪存在與它長度相同的邊,嚴格次小產生樹只需刪沒有與自己長度相同的邊。            2.以最小產生樹上每個點為根dfs,求出樹上任意兩點之間的最長邊。枚舉所有不在最小產生樹上的邊,將其添加到樹上必定形成一個環,去掉環上的最長邊形成的產生樹最小。判斷產生樹是否唯一,求次小產生樹嚴格次小產生樹等均在此處處理。void work(){best=new int[n][n];vis=new

雜七雜八(1)圖論部分

1.圖的度序列定義:如果V(G)={v1,v2,v3,...,vp};則稱非負整數序列(d(v1),d(v2),d(v3),...,d(vp))為圖G的度序列.(定義中的圖指廣義的圖,含有多重邊或環).Havel定理:我們把序列排成不增序,即d1>=d2>=...>=dn,則d可簡單圖化若且唯若d'=(d2-1, d3-1, ... d(d1+1)-1, d(d1+2), d(d1+3), ...

SPOJ/GSS3:Can you answer these queries III(線段樹)

http://www.spoj.pl/problems/GSS3/題意:給出一個數列,求某個區間內的最大子序列和,並進行對某些點的更新。GSS1是個不更新只查詢的簡化版題目,差別不大。跟hdu3397有點像,統計量也很像,但是犯了經驗主義的錯誤,左起最大欄位和=左區間左起最大欄位和  或   左區間和+右區間左起最大欄位和(如果左區間左起最大欄位和==左區間和)是錯誤的,例如:100 -1 100 100,因此pushup操作應改為maxl=MAX(L[maxl],L[sum]+R[maxl])

DLX精確覆蓋解數獨問題

關於Dancing Links的介紹最好仔細閱讀一下Knuth的論文,那篇翻譯的文章也不錯,這位仁兄的 部落格比較易懂http://blog.csdn.net/sunny606/article/details/7833551通過閱讀論文主要有如下幾點體會:1.精確覆蓋的最基本模型是:在一個01矩陣中選擇若干個行,使得沒列都包含且僅包含一個12.Dangcing

總頁數: 61357 1 .... 13433 13434 13435 13436 13437 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.