FHVirus
一個弱弱的病毒,感染症狀為壓常毒瘤綜合併發症。
對沒錯!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→v 若且唯若在 G 中存在一條 u 到 v 的路徑。
我們定義有向圖中的集團是一個點集合U,
對任何集合內的兩個點 u,v,
必定存在一條 u→v 或 v→u 的有向邊。
集團的大小定義為這個集團的頂點個數。
現在給你一張圖G,請求出 T(G)的最大集團大小。
題目等價於求最大弱連通分量。
給定一個長度為 n≤3⋅105 的整數序列,
有一個人要從任一位置 i 出發,
且可以動到 i±1 的條件是 ai≥ai±1。
又另外在一些位置設置噴射裝置,
使到達此位置的人可以移動到任一位置。
求最多可以經過多少個位置?
給定一張 n≤106 個點的圖,求最大弱聯通分量。
好好判重邊!
沒有環!
By FHVirus