日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Tarjan无向图连通性

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tarjan无向图连通性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

割點:去掉某點x,該無向圖分割成兩部分(及以上)

割邊:去掉某條邊x,該無向圖分割成兩部分(及以上)

時間戳:在搜索樹上的遍歷序號dfn

追溯值:subtree子樹和非搜索樹上可達的最小點

割邊和割點判定

 1 void tarjan(int x, int in_edge) {
 2     dfn[x] = low[x] = ++num;
 3     for (int i = head[x]; i; i = nex[i]) {
 4         int y = ver[i];
 5         if (!dfn[y]) {
 6             tarjan(y, i);
 7             low[x] = min(low[x], low[y]);
 8             if (low[y] > dfn[x])
 9                 bridge[i] = bridge[i ^ 1] = true;
10         } else if (i != (in_edge ^ 1))
11             low[x] = min(low[x], dfn[y]);
12     }
13 }
 1 void tarjan(int x) {
 2     dfn[x] = low[x] = ++num;
 3     int flag = 0;
 4     for (int i = head[x]; i; i = nex[i]) {
 5         int y = ver[i];
 6         if (!dfn[y]) {
 7             tarjan(y);
 8             low[x] = min(low[x], low[y]);
 9             if (low[y] >= dfn[x]) {
10                 flag++;
11                 if (x != 1 || flag > 1) cut[x] = true;
12             }
13         } else low[x] = min(low[x], dfn[y]);
14     }
15 }

邊縮點:利用dfs進行標記編號

點縮點:%%%

https://github.com/lydrainbowcat/tedukuri/blob/master/%E9%85%8D%E5%A5%97%E5%85%89%E7%9B%98/%E6%AD%A3%E6%96%87%E5%8C%85%E5%90%AB%E7%9A%84%E7%A8%8B%E5%BA%8F%E7%89%87%E6%AE%B5/0x66%20tarjan_dcc_euler.cpp

轉載于:https://www.cnblogs.com/rign/p/11108844.html

總結

以上是生活随笔為你收集整理的Tarjan无向图连通性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。