青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

oyjpArt ACM/ICPC算法程序設計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

/*******************************
圖的DFS信息構建 by oyjpArt
g矩陣: g[i][j] -> 0 : 無邊
                         1 : 可重復訪問邊
                        -1: 非可重復訪問邊
說明:以為在無向圖中u->v訪問之后就不能再從v->u訪問了
       故{u, v}訪問了之后{v, u}要置-1
     如果是有向圖 則沒有這個規則
gc矩陣:gc[i][j]-> 0 : 無邊
                  1 : 樹枝邊
      2 : 反向邊
      3 : 正向邊
      4 : 交叉邊
d數組: 頂點的開始訪問時間表
f數組: 頂點的結束訪問時間表
c數組: 頂點顏色表 0白色 -1灰色 1黑色
p數組: 頂點的前驅表
l數組: 頂點的L值(最頂層的祖先層數)
b數組: 頂點的度數表

關于標號函數 LOW()
LOW(U)代表的是與U以及U的子孫直接相連的結點的最高輩分(深度)
                                 d[U]                 U首次被訪問時
LOW[U] =    min(LOW[U], d[W])    訪問邊{U,W}
                  min(LOW[U], LOW[S])  U的兒子S的關聯邊全部被訪問時
/*******************************/
const int maxn = 100;
int n, g[maxn][maxn], gc[maxn][maxn];
int d[maxn], f[maxn], l[maxn], p[maxn], c[maxn], b[maxn];
int time;

void dfs_visit(int u) {//遞歸搜索以U為根的深度優先樹
 int v;
 c[u] = -1;         //置頂點為灰色//去掉這句之后適用于有向圖(后面設置不可訪問亦同)
 time++; d[u] = time, l[u] = time;
 for(v = 1; v<=n; v++)
  if(g[u][v] > 0)
   if(c[v] == 0)  {         //如果v是白色節點
    g[v][u] = -1;        //不可再訪問
    gc[u][v] = 1;        //樹枝邊
    b[u]++;              //度數
    p[v] = u;            //記錄父親節點
    dist_visit(v);       //遞歸搜索以v為根的深度優先樹
    if(l[v] < l[u])      //v是u的后代
     l[u] = l[v];     //u的兒子v的關聯邊搜索完后計算父親的low值
    g[v][u] = 1;         //恢復可訪問標志
   }
   else {
    if(c[v] < 0) {       //若頂點為灰色
     if(l[v] < l[u])  //u與v相連
      l[u] = l[v];
     gc[u][v] = 2;    //反向邊
    }
    else  {              //黑色
     if(d[v] > d[u])
      gc[u][v] = 3;         //正向邊
     else
      gc[u][v] = 4;         //交叉邊
    }
   }
 c[u] = 1;             //DFS完畢 置黑色吧
 time++; f[u] = time;
}

void dfs() {
 int u;
 memset(gc, 0, sizeof(gc));
 memset(c, 0, sizeof(c));
 memset(b, 0, sizeof(b));
 time = 0;
 for(u = 1; u <= n; u++)
  if(c[u] == 0) {
   p[u] = 0;
   dfs_visit(u);
  }
}
/*******************************
DFS3大經典應用
一: TOPO排序
 DFS之后按照結束訪問時間反向排序即可 如果在DFS過程中出現方向邊(成環) 則無法TOPO
當然我們還有一種經典的TOPO方法 找0度節點迭代刪除法 o(M+N)的TC
二: 求割點和橋
判定規則1: 如果root節點又多于一個1子節點 則root是割點
判定規則2: 如果一個節點u有某一個子節點v不含到u的祖先節點的后向邊 則u為割點
 即對于u的子節點v, u是割點的條件 (p[u] == 0 && b[v] > 1) || (p[u] > 0 && l[v] >= d[u])
橋: 不屬于任何簡單回路的邊 "一牽動全身" l[v] > d[u]即是橋
之所以不能等于 實際上等于的情況是存在2條以上的邊 自然就不是橋了~
 (注意加上割點表 以防重復輸出)
三: 求有向圖的極大強連通分支
1.對圖進行DFS遍歷 遍歷中記下所有的結束時間A[i].遍歷的結果是構建的一座森林W1
  我們對W1中的每棵樹G進行步驟2到步驟3的操作
2.改變圖G中每一條邊的方向 構造出新的有向圖Gr
3.按照A[i]由小到大的順序對Gr進行DFS遍歷.遍歷的結果是構建了新的樹林W2.
  W2中每棵樹上的頂點構成了有向圖的極大強連通分支
/*******************************/
//一個更加簡潔的程序框架(來自<<算法藝術與信息學競賽>>)-------
這里面的Ancestor相當于上面所說的LOW
Procedure DFS(節點編號k, k的父親節點編號father, deep:integer)
var i, tot : integer;
begin
  C[k] = -1; {灰色}
  D[k] = deep; {記錄深度}
  Ancestor[k] = deep, tot = 0;

  for i = 1->n
  begin
      if(節點i和k相連) and (i != father) and (Ci = -1)
     then Ancestor[k] = Min(Ancestor[k], Di);
   if(節點i與k相連) and (Ci = 0) then
   begin
  DFS(i, k, deep + 1);
    tot++, Ancestor[k] = Min(Ancestor[k], Ancestor[i]);
    if(k == Root) and (tot > 1) or
   ( (k != Root) and (Ancestor[i] >= D[k]) )
   then Cut[k] = true;
    if(Ancestor[i] > D[k]) then Brige[k][i] = true
      end
  end
  C[k] = 1; //黑色
  time++, A[i] = time;
end;
//-----------------------------------------------------------

Feedback

# re: 圖的DFS信息構建+割點,橋,極大連通子圖三大法寶  回復  更多評論   

2007-05-20 21:49 by YPP
你好,我是ACM新手。
請問,在ACM比賽中遇到有關圖的問題時是用鄰接表好還是鄰接矩陣好?我覺得兩個都有不方便的地方。
比如輸入格式要求如下(頂點 與該頂點相鄰的頂點數 與該頂點相鄰的頂點):
A 3 B C D
B 2 A C
C 1 D
D 2 A B

# re: 圖的DFS信息構建+割點,橋,極大連通子圖三大法寶  回復  更多評論   

2007-05-21 13:53 by oyjpart
下面我用n代表點 m代表邊
鄰接表:訪問任任兩點之間的邊最壞o(n) 遍歷一個點的所有邊o(該點的度數)
鄰接矩陣:訪問任兩點之間的邊o(1) 但是遍歷一個點的所有邊o(n)
由此可以看出 選擇是有目的的
第一 對于稀疏圖 有時候內存不夠用 不得不待用鄰接表
第二 對于比較密集的圖 鄰接表無甚優勢
第三 如果不需要在稀疏圖中經常性的遍歷一個點的所有邊 鄰接矩陣是仍首選的

看到你的輸入數據似乎用鄰接矩陣比較好

# re: 圖的DFS信息構建+割點,橋,極大連通子圖三大法寶  回復  更多評論   

2007-05-22 20:23 by YPP
非常感謝你的解答。
我那輸入數據,我覺得用鄰接矩陣挺麻煩的。因為只有所有數據輸入完畢才確定圖所有的頂點,不太好處理

# re: 圖的DFS信息構建+割點,橋,極大連通子圖三大法寶  回復  更多評論   

2007-05-23 13:24 by oyjpart
不管他 開靜態的二維數組滿足題目最大頂點數即可
如果題目沒有說明而且你熟悉stl的話 你就用二維vector

# re: 圖的DFS信息構建+割點,橋,極大連通子圖三大法寶  回復  更多評論   

2007-12-18 13:04 by robber
非常感謝!
對這個經典問題我思考一天了。對割點、橋等與這個算法的深入聯系都沒發現,現在好了。

# re: 圖的DFS信息構建+割點,橋,極大連通子圖三大法寶  回復  更多評論   

2007-12-18 14:16 by alpc12
不用謝 呵呵
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲视频精品在线| 欧美激情视频在线免费观看 欧美视频免费一| 免费欧美日韩国产三级电影| 国产一区二区高清| 一区二区成人精品| 性欧美办公室18xxxxhd| 亚洲无玛一区| 久久精品理论片| 国产欧美一区二区三区国产幕精品| 一区二区三区高清不卡| 亚洲视频精品在线| 国产欧美日韩精品在线| 久久久久久999| 亚洲黑丝在线| 亚洲九九精品| 国产免费观看久久| 欧美成人在线免费视频| 亚洲一区综合| 亚洲第一级黄色片| 久久精品一本久久99精品| 在线观看一区二区视频| 欧美另类videos死尸| 欧美呦呦网站| 亚洲婷婷免费| 欧美高清在线一区| 欧美一区二区三区视频免费| 在线日韩精品视频| 国产精品亚洲产品| 欧美日韩在线不卡| 乱码第一页成人| 亚洲精品欧美极品| 国语自产在线不卡| 国产精品自在线| 国产精品蜜臀在线观看| 国产精品国产成人国产三级| 欧美大尺度在线观看| 久久嫩草精品久久久精品| 欧美一区二区三区喷汁尤物| 一本一本久久| 国产精品99久久99久久久二8 | 欧美亚洲免费电影| 一区二区av在线| 中文国产亚洲喷潮| 亚洲淫性视频| 亚洲影视综合| 久久久久久国产精品mv| 久久精品国产清高在天天线| 欧美一区二区三区日韩视频| 欧美一区二区视频网站| 性色av一区二区三区红粉影视| 亚洲女女女同性video| 亚洲欧美日韩综合一区| 久久五月天婷婷| 亚洲国产精品免费| 一区二区毛片| 久久免费视频在线| 欧美性猛交xxxx乱大交蜜桃| 国产一区二区三区无遮挡| 亚洲成人原创| 欧美亚洲一区| 亚洲黄色精品| 久久精品人人做人人爽电影蜜月| 欧美精品久久久久久久久久| 国产精品国产自产拍高清av| 影音先锋中文字幕一区| 亚洲天堂视频在线观看| 久久婷婷av| 午夜视频在线观看一区| 欧美成人在线网站| 欧美日韩国产专区| 久久精品视频在线播放| 国产综合久久久久久| 午夜精品久久久久久久蜜桃app| 在线免费观看欧美| 亚洲娇小video精品| 久久亚洲视频| 亚洲精选国产| 久久精品国产亚洲一区二区| 国产一区二区三区四区五区美女| 亚洲日韩中文字幕在线播放| 欧美另类高清视频在线| 欧美大片免费观看| 久久综合久久综合久久| 亚洲精品一区在线观看| 性欧美大战久久久久久久久| 亚洲日韩视频| 欧美精品在线观看一区二区| 亚洲日本va午夜在线电影 | 欧美在线3区| 久久国内精品视频| 在线观看欧美成人| 亚洲欧美日韩国产成人精品影院 | 亚洲欧美日韩天堂一区二区| 一色屋精品视频免费看| 欧美一区二区三区免费大片| 亚洲视频播放| 欧美日韩成人综合| 欧美影院午夜播放| 亚洲三级免费电影| 午夜精品视频网站| 亚洲激情欧美激情| 亚洲午夜一区二区三区| 亚洲茄子视频| 国产精品网站在线观看| 欧美中文字幕视频在线观看| 亚洲国产欧美一区二区三区同亚洲| 亚洲免费观看在线观看| 一区二区视频在线观看| 久久精品日韩| 久久精品99国产精品| 亚洲欧洲日产国产网站| 另类av导航| 久久精品国产第一区二区三区| 一卡二卡3卡四卡高清精品视频| 欧美在线在线| 亚洲男人的天堂在线观看| 国产欧美一区二区三区另类精品| 久久久久一本一区二区青青蜜月| 亚洲伊人网站| 午夜在线播放视频欧美| 亚洲一区在线播放| 亚洲欧美国产77777| 亚洲国产高清aⅴ视频| 亚洲欧美日韩专区| 一卡二卡3卡四卡高清精品视频| 国产自产2019最新不卡| 欧美女同视频| 欧美激情乱人伦| 久久亚洲高清| 久久综合网络一区二区| 久久青青草原一区二区| 亚洲美女在线观看| 亚洲国产精品一区二区第四页av| 亚洲国产精品一区制服丝袜| 亚洲人成在线影院| 中文欧美字幕免费| 一区二区三区视频在线播放| 亚洲第一久久影院| 亚洲理论电影网| 久久不见久久见免费视频1| 欧美91视频| 中国亚洲黄色| 亚洲视屏在线播放| 亚洲看片网站| 欧美一区二区三区视频在线观看| 亚洲一区二区三区高清| 亚洲免费在线播放| 欧美一区二区三区成人| 免费欧美在线| 亚洲大胆视频| 亚久久调教视频| 久久精品国亚洲| 亚洲国产日韩欧美在线动漫| 欧美在线免费播放| 欧美日韩在线高清| 日韩一级片网址| 欧美中文在线观看| 欧美一二三视频| 久久久综合激的五月天| 欧美激情女人20p| 香蕉久久一区二区不卡无毒影院| 欧美日产在线观看| 日韩一级裸体免费视频| 久久野战av| 久久免费视频观看| 亚洲国产精品久久久久秋霞蜜臀 | 午夜在线电影亚洲一区| 欧美成人一区二区三区片免费 | 久久久久久久999精品视频| 一区二区三区欧美视频| 国产精品亚洲人在线观看| 欧美专区在线观看一区| 久久久精品欧美丰满| 久久大逼视频| 久久手机免费观看| 亚洲一级二级在线| 老巨人导航500精品| 激情欧美国产欧美| 美脚丝袜一区二区三区在线观看 | 欧美v亚洲v综合ⅴ国产v| 久久噜噜亚洲综合| 欧美色中文字幕| 日韩图片一区| 亚洲一区二区三区精品视频| 欧美日韩一区二区三区| 久久理论片午夜琪琪电影网| 欧美成人69av| 在线亚洲欧美| 亚洲性夜色噜噜噜7777| 亚洲国产精品福利| 久久久久久久综合狠狠综合| 亚洲天堂男人| 久久精品二区| 亚洲欧美制服中文字幕| 免费久久久一本精品久久区| 亚洲欧美电影院| 欧美日韩高清一区| 激情欧美日韩| 日韩视频免费观看高清完整版| 国产一二三精品|