對沒錯!BCC 有兩種!
const int N = 1e5 + 225;
int n;
// The Graph (Adjacency List)
vector<int> adj[N];
// Visited Tag
bool vis[N];
0
1
2
3
4
5
6
7
8
9
從這個點開始,
就把他當根
Tree Edge
Back Edge
無向圖的 DFST 上不存在 Cross Edge。
直觀(不嚴謹)證明:
若存在 Cross Edge,
則在 DFS 時會被走過去,
此邊會變成 Tree Edge。
const int N = 1e5 + 225;
int n;
vector<int> adj[N];
// Number vertex by pre-order traverse
// owo is the timestamp, 1-based
int pre[N], ++owo;
void dfs(int u){
pre[u] = ++owo;
for(int v: adj[u]){
// Not having a pre[] value
// is the same as not visited
if(!pre[v]) dfs(v);
}
}
把 DF Tree 上的點編號好即可!
實作上,我們要對每個節點 \(u\) 紀錄「\(u\) 的子節點最高可以
不過讀書會都快一學期了應該要可以自己做出來吧?
可以看看裡面的例題喔!
0
1
2
3
4
5
6
7
8
9
0
0
2
0
0
5
5
5
8
9
low 值
注意:演算法筆記裡的做法不太一樣
(跟他線上討論過了,有興趣去看下方連結)
(跟前面 tmw 面試題一模一樣)
給有向圖 \(G\)(可能有自環或重邊),
並建構一張新的圖 \(T(G)\),頂點集跟原圖 \(G\) 一樣。
在 \(T(G)\)存在一條有向邊 \(u \rightarrow v\) 若且唯若在 \(G\) 中存在一條 \(u\) 到 \(v\) 的路徑。
我們定義有向圖中的集團是一個點集合\(U\),
對任何集合內的兩個點 \(u, v\),
必定存在一條 \(u \rightarrow v\) 或 \(v \rightarrow u\) 的有向邊。
集團的大小定義為這個集團的頂點個數。
現在給你一張圖\(G\),請求出 \(T(G)\)的最大集團大小。
題目等價於求最大弱連通分量。
給定一個長度為 \(n \leq 3 \cdot 10^5\) 的整數序列,
有一個人要從任一位置 \(i\) 出發,
且可以動到 \(i \pm 1\) 的條件是 \(a_i \geq a_{i \pm 1}\)。
又另外在一些位置設置噴射裝置,
使到達此位置的人可以移動到任一位置。
求最多可以經過多少個位置?
給定一張 \(n \leq 10^6\) 個點的圖,求最大弱聯通分量。
好好判重邊!
沒有環!