• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 18,  comments - 5,  trackbacks - 0

            一、定義與定理
                  LCA:Least Common Ancestors(最近公共祖先),對(duì)于一棵有根樹(shù)T的任意兩個(gè)節(jié)點(diǎn)u,v,求出LCA(T, u, v),即離跟最遠(yuǎn)的節(jié)點(diǎn)x,使得x同時(shí)是u和v的祖先。
                  在線算法:用比較長(zhǎng)的時(shí)間做預(yù)處理,但是等信息充足以后每次回答詢問(wèn)只需要用比較少的時(shí)間。
                  離線算法:先把所有的詢問(wèn)讀入,然后一起把所有詢問(wèn)回答完成。
                  RMQ:給出一個(gè)數(shù)組A,回答詢問(wèn)RMQ(A, i, j),即A[i...j]之間的最值的下標(biāo)。
            二、DFS+RMQ
                  1)Sparse Table(ST)算法
                  描述:

             1 //初始化
             2 INIT_RMQ
             3 //max[i][j]中存的是重j開(kāi)始的i個(gè)數(shù)據(jù)中的最大值,最小值類(lèi)似,num中存有數(shù)組的值
             4     for i : 1 to n
             5         max[0][i] = num[i]
             6     for i : 1 to log(n)/log(2)
             7         for j : 1 to n
             8             max[i][j] = MAX(max[i-1][j], max[i-1][j+2^(i-1)]
             9 //查詢
            10 RMQ(i, j)
            11     k = log(j-i+1/ log(2)
            12     return MAX(max[k][i], max[k][j-2^k+1])

                  分析:初始化過(guò)程實(shí)際上是一個(gè)動(dòng)態(tài)規(guī)劃的思想。易知,初始化過(guò)程效率是O(nlogn),而查詢過(guò)程效率是O(1)。ST是一個(gè)在線算法。
                  示例:POJ 3368 解題報(bào)告
                  2)求解LCA問(wèn)題
                  描述:
                  (1)DFS:從樹(shù)T的根開(kāi)始,進(jìn)行深度優(yōu)先遍歷,并記錄下每次到達(dá)的頂點(diǎn)。第一個(gè)的結(jié)點(diǎn)是root(T),每經(jīng)過(guò)一條邊都記錄它的端點(diǎn)。由于每條邊恰好經(jīng)過(guò)2次,因此一共記錄了2n-1個(gè)結(jié)點(diǎn),用E[1, ... , 2n-1]來(lái)表示。
                  (2)計(jì)算R:用R[i]表示E數(shù)組中第一個(gè)值為i的元素下標(biāo),即如果R[u] < R[v]時(shí),DFS訪問(wèn)的順序是E[R[u], R[u]+1, ..., R[v]]。雖然其中包含u的后代,但深度最小的還是u與v的公共祖先。
                  (3)RMQ:當(dāng)R[u] ≥ R[v]時(shí),LCA[T, u, v] = RMQ(L, R[v], R[u]);否則LCA[T, u, v] = RMQ(L, R[u], R[v]),計(jì)算RMQ。
                  由于RMQ中使用的ST算法是在線算法,所以這個(gè)算法也是在線算法。
                  示例:ZOJ 3195 解題報(bào)告
            三、Tarjan算法
                  描述:Tarjan算法是一個(gè)離線算法,也就是說(shuō)只有先獲得所有的查詢,再按一個(gè)特定的順序進(jìn)行運(yùn)算。

             1 //parent為并查集,F(xiàn)IND為并查集的查找操作
             2 Tarjan(u)
             3     visit[u] = true
             4     for each (u, v) in QUERY
             5         if visit[v]
             6             ans(u, v) = FIND(v)
             7     for each (u, v) in TREE    
             8         if !visit[v]
             9             Tarjan(v)
            10             parent[v] = u
                  示例:HDOJ 2586 解題報(bào)告
            posted on 2009-07-04 15:25 Icyflame 閱讀(6949) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 圖論
            国产午夜久久影院| 久久久99精品成人片中文字幕| 婷婷久久综合九色综合绿巨人| 热久久视久久精品18| 亚洲狠狠婷婷综合久久蜜芽| 久久夜色精品国产噜噜噜亚洲AV| 久久99久久99精品免视看动漫| 草草久久久无码国产专区| 久久久久久精品成人免费图片 | 66精品综合久久久久久久| 99热热久久这里只有精品68| 亚洲国产成人乱码精品女人久久久不卡 | 久久青青草原精品国产| 久久国产综合精品五月天| 久久久久亚洲av无码专区导航| 国产激情久久久久影院老熟女| 亚洲国产精品无码久久一区二区 | 无码人妻久久一区二区三区蜜桃| 久久亚洲私人国产精品vA| 人妻系列无码专区久久五月天| 久久婷婷五月综合97色一本一本| 久久久久久亚洲精品不卡 | 久久丫精品国产亚洲av不卡| 国产精品一区二区久久精品无码| 亚洲第一极品精品无码久久| 久久综合九色欧美综合狠狠| 99国产欧美久久久精品蜜芽 | 久久精品国产亚洲AV无码偷窥| 怡红院日本一道日本久久 | 亚洲午夜久久久久久久久久| 久久久久18| 久久精品国产亚洲Aⅴ蜜臀色欲| 99久久国语露脸精品国产| 亚洲伊人久久精品影院| 伊人色综合九久久天天蜜桃| 久久九九久精品国产| 久久99精品久久久久久9蜜桃| 亚洲午夜久久影院| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 精品久久久中文字幕人妻| 7777精品伊人久久久大香线蕉|