基礎圖論複習

DFS & BFS

當我們想要遍歷一張圖的時候,我們就會使用 DFS/BFS

DFS BFS
使用遞迴或 Stack 的概念

會不停地往下走
使用 Queue 的概念

會以較近的點開始
vector<int> adj[N];
int visited[N];

void dfs(int u){
    for(auto v : adj[u]){
        if(!visited[v]){
            dfs(v);
        }
    }
}
queue<int> q;
q.push(s);

while(!q.empty()){
    int u = q.front(); q.pop();
    for(auto v : adj[u]){
        if(!visited[v])
            q.push(v);
    }
}

DAG (有向無環圖)

Directed Acyclic Graph

DAG 與拓樸排序

由於這個特性,我們可以利用這個來當

DP 的轉移順序

 

也就是我們常說的在 DAG 上 DP

DSU (併查集)

Disjoint Set Union

Made with Slides.com