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

oyjpArt ACM/ICPC算法程序設(shè)計(jì)空間

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

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

關(guān)于標(biāo)號函數(shù) LOW()
LOW(U)代表的是與U以及U的子孫直接相連的結(jié)點(diǎn)的最高輩分(深度)
                                 d[U]                 U首次被訪問時(shí)
LOW[U] =    min(LOW[U], d[W])    訪問邊{U,W}
                  min(LOW[U], LOW[S])  U的兒子S的關(guān)聯(lián)邊全部被訪問時(shí)
/*******************************/
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為根的深度優(yōu)先樹
 int v;
 c[u] = -1;         //置頂點(diǎn)為灰色//去掉這句之后適用于有向圖(后面設(shè)置不可訪問亦同)
 time++; d[u] = time, l[u] = time;
 for(v = 1; v<=n; v++)
  if(g[u][v] > 0)
   if(c[v] == 0)  {         //如果v是白色節(jié)點(diǎn)
    g[v][u] = -1;        //不可再訪問
    gc[u][v] = 1;        //樹枝邊
    b[u]++;              //度數(shù)
    p[v] = u;            //記錄父親節(jié)點(diǎn)
    dist_visit(v);       //遞歸搜索以v為根的深度優(yōu)先樹
    if(l[v] < l[u])      //v是u的后代
     l[u] = l[v];     //u的兒子v的關(guān)聯(lián)邊搜索完后計(jì)算父親的low值
    g[v][u] = 1;         //恢復(fù)可訪問標(biāo)志
   }
   else {
    if(c[v] < 0) {       //若頂點(diǎn)為灰色
     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大經(jīng)典應(yīng)用
一: TOPO排序
 DFS之后按照結(jié)束訪問時(shí)間反向排序即可 如果在DFS過程中出現(xiàn)方向邊(成環(huán)) 則無法TOPO
當(dāng)然我們還有一種經(jīng)典的TOPO方法 找0度節(jié)點(diǎn)迭代刪除法 o(M+N)的TC
二: 求割點(diǎn)和橋
判定規(guī)則1: 如果root節(jié)點(diǎn)又多于一個(gè)1子節(jié)點(diǎn) 則root是割點(diǎn)
判定規(guī)則2: 如果一個(gè)節(jié)點(diǎn)u有某一個(gè)子節(jié)點(diǎn)v不含到u的祖先節(jié)點(diǎn)的后向邊 則u為割點(diǎn)
 即對于u的子節(jié)點(diǎn)v, u是割點(diǎn)的條件 (p[u] == 0 && b[v] > 1) || (p[u] > 0 && l[v] >= d[u])
橋: 不屬于任何簡單回路的邊 "一牽動(dòng)全身" l[v] > d[u]即是橋
之所以不能等于 實(shí)際上等于的情況是存在2條以上的邊 自然就不是橋了~
 (注意加上割點(diǎn)表 以防重復(fù)輸出)
三: 求有向圖的極大強(qiáng)連通分支
1.對圖進(jìn)行DFS遍歷 遍歷中記下所有的結(jié)束時(shí)間A[i].遍歷的結(jié)果是構(gòu)建的一座森林W1
  我們對W1中的每棵樹G進(jìn)行步驟2到步驟3的操作
2.改變圖G中每一條邊的方向 構(gòu)造出新的有向圖Gr
3.按照A[i]由小到大的順序?qū)r進(jìn)行DFS遍歷.遍歷的結(jié)果是構(gòu)建了新的樹林W2.
  W2中每棵樹上的頂點(diǎn)構(gòu)成了有向圖的極大強(qiáng)連通分支
/*******************************/
//一個(gè)更加簡潔的程序框架(來自<<算法藝術(shù)與信息學(xué)競賽>>)-------
這里面的Ancestor相當(dāng)于上面所說的LOW
Procedure DFS(節(jié)點(diǎn)編號k, k的父親節(jié)點(diǎn)編號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(節(jié)點(diǎn)i和k相連) and (i != father) and (Ci = -1)
     then Ancestor[k] = Min(Ancestor[k], Di);
   if(節(jié)點(diǎn)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信息構(gòu)建+割點(diǎn),橋,極大連通子圖三大法寶  回復(fù)  更多評論   

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

# re: 圖的DFS信息構(gòu)建+割點(diǎn),橋,極大連通子圖三大法寶  回復(fù)  更多評論   

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

看到你的輸入數(shù)據(jù)似乎用鄰接矩陣比較好

# re: 圖的DFS信息構(gòu)建+割點(diǎn),橋,極大連通子圖三大法寶  回復(fù)  更多評論   

2007-05-22 20:23 by YPP
非常感謝你的解答。
我那輸入數(shù)據(jù),我覺得用鄰接矩陣挺麻煩的。因?yàn)橹挥兴袛?shù)據(jù)輸入完畢才確定圖所有的頂點(diǎn),不太好處理

# re: 圖的DFS信息構(gòu)建+割點(diǎn),橋,極大連通子圖三大法寶  回復(fù)  更多評論   

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

# re: 圖的DFS信息構(gòu)建+割點(diǎn),橋,極大連通子圖三大法寶  回復(fù)  更多評論   

2007-12-18 13:04 by robber
非常感謝!
對這個(gè)經(jīng)典問題我思考一天了。對割點(diǎn)、橋等與這個(gè)算法的深入聯(lián)系都沒發(fā)現(xiàn),現(xiàn)在好了。

# re: 圖的DFS信息構(gòu)建+割點(diǎn),橋,極大連通子圖三大法寶  回復(fù)  更多評論   

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>
            亚洲第一偷拍| 久久人人爽国产| 亚洲第一天堂av| 极品少妇一区二区三区精品视频| 欧美高清在线一区| 韩国女主播一区| 午夜视频在线观看一区二区三区| 日韩午夜激情电影| 欧美sm重口味系列视频在线观看| 国产视频一区在线| 亚洲欧美日韩视频一区| 91久久久久久久久久久久久| 性欧美超级视频| 久久久久免费观看| 久久夜色精品一区| 一本色道久久99精品综合| 亚洲欧美中日韩| 欧美成人免费全部| 欧美高清免费| 久热精品视频在线观看| 麻豆91精品| 欧美一区二区三区在线视频| 欧美一区二区三区免费大片| 亚洲伦理精品| 久久久久国产精品午夜一区| 国内激情久久| 亚洲国内欧美| 国产欧美日韩一区二区三区在线观看 | 激情欧美一区二区| 老色鬼久久亚洲一区二区| 欧美成人午夜激情在线| 午夜久久久久久| 亚洲国产精品久久久久秋霞影院| 日韩亚洲精品在线| 亚洲高清在线观看| 欧美大胆人体视频| 国产精品嫩草影院av蜜臀| 欧美激情精品| 亚洲激情自拍| 免费不卡视频| 欧美96在线丨欧| 久久精品综合网| 一区二区三区精品视频| 鲁大师成人一区二区三区| 亚洲一区二区不卡免费| 午夜性色一区二区三区免费视频 | 国产精品乱码一区二区三区 | 久久香蕉国产线看观看网| 亚洲国产合集| 久久久久久伊人| 久久国产精品久久精品国产| 国产精品久久久久久久一区探花| 久久人人爽爽爽人久久久| 欧美日韩精品一区二区三区四区| 久久婷婷一区| 亚洲一区二区三区欧美| 久久超碰97人人做人人爱| 亚洲先锋成人| 99国产精品| 一区二区三区四区五区精品视频| 亚洲精品美女91| 亚洲精品一品区二品区三品区| 亚洲国产视频一区| 久久精品一区蜜桃臀影院 | 激情五月婷婷综合| 性色一区二区三区| 亚洲国产精品久久人人爱蜜臀 | 狠狠色丁香婷综合久久| 欧美精品成人91久久久久久久| 一二三区精品| 在线观看一区欧美| 91久久黄色| 亚洲影院色无极综合| 欧美亚洲一区二区三区| 欧美黑人国产人伦爽爽爽| 亚洲日本中文字幕区| 老司机免费视频一区二区| 欧美一区二区久久久| 亚洲精品免费一二三区| 亚洲精品久久久久| 国产亚洲午夜| 欧美日韩一区在线播放| 久久精品一区二区三区不卡牛牛 | 欧美视频免费在线观看| 亚洲国产欧美在线| 久久免费视频在线观看| 亚洲精品少妇30p| 久久先锋影音av| 欧美日韩调教| 亚洲婷婷在线| 美国十次成人| 久久精品视频va| 国产精品成人播放| 欧美女人交a| 亚洲视频1区| 欧美日韩一本到| 欧美四级在线观看| 国产美女精品一区二区三区| 亚洲电影免费在线| 亚洲精品日韩激情在线电影| 久久久综合网站| 欧美成人精品激情在线观看| 亚洲第一在线| 999在线观看精品免费不卡网站| 亚洲美女视频| 欧美一区二区三区免费观看| 久久精品国产亚洲高清剧情介绍| 欧美+亚洲+精品+三区| 香蕉久久夜色精品| 在线不卡免费欧美| 能在线观看的日韩av| 久色婷婷小香蕉久久| 亚洲色无码播放| 在线午夜精品| 久久精品国产亚洲高清剧情介绍| 一本大道av伊人久久综合| 欧美日本韩国在线| 激情自拍一区| 亚洲午夜日本在线观看| 久久久久国产免费免费| 日韩视频在线播放| 欧美伦理91| 久久久综合激的五月天| 亚洲欧美网站| 欧美在线在线| 欧美一区二区三区免费观看视频| 六月天综合网| 亚洲激情视频在线观看| 国产精品日韩精品| 亚洲福利av| 欧美日韩视频第一区| 久久久久久日产精品| 欧美日韩二区三区| 亚洲美女精品久久| 国产一区视频观看| 欧美一区91| 狠狠色伊人亚洲综合成人| 亚洲乱码一区二区| 亚洲小少妇裸体bbw| 91久久视频| 欧美高清视频一区二区三区在线观看| 黄色成人在线免费| 亚洲国产日韩欧美在线图片| 男女av一区三区二区色多| 亚洲激情视频在线观看| 午夜一区在线| 久久五月婷婷丁香社区| 亚洲伊人一本大道中文字幕| 久久国产精品久久久| 激情丁香综合| 亚洲国产欧美一区二区三区同亚洲| 一本色道久久综合亚洲精品小说| 亚洲国产日韩欧美| 噜噜噜在线观看免费视频日韩| 久久综合九色综合网站| 亚洲免费在线精品一区| 免费在线看一区| 欧美伊人久久久久久午夜久久久久 | 国产有码在线一区二区视频| 久久九九有精品国产23| 久久免费精品视频| 亚洲视频一二三| 久久精品国产99国产精品| 1024日韩| 美日韩丰满少妇在线观看| 欧美高清一区二区| 欧美一区二区三区视频在线观看| 久久久999精品| 国产欧美日韩| 老司机精品导航| 亚洲视频免费看| 亚洲国产综合在线看不卡| 午夜国产一区| 亚洲在线视频一区| 亚洲第一级黄色片| 国产性色一区二区| 国产精品网站视频| 国产午夜精品美女毛片视频| 9人人澡人人爽人人精品| 亚洲视频图片小说| 99在线精品观看| 蜜桃av一区二区| 日韩视频免费看| 久久久久久9| 欧美成人一区在线| 日韩视频在线观看| 国产精品国产三级国产aⅴ无密码| 最新国产乱人伦偷精品免费网站| 亚洲激情亚洲| 欧美第一黄网免费网站| 加勒比av一区二区| 欧美呦呦网站| 欧美激情一区二区在线| 欧美图区在线视频| 欧美成人精品1314www| 久久精品国产69国产精品亚洲| 亚洲午夜激情免费视频| 亚洲图片在线| 亚洲综合成人婷婷小说| 午夜宅男欧美|