集训总结1

集训总结1

1 .涉及知识点

1.1 二分图(最大匹配,最大独立集,最小点覆盖,最小边覆盖)

1.1.1 涉及算法

匈牙利算法,dinic

相关参见 【学习笔记】二分图

1.2 连通性

1.2.1 涉及算法

  • Kosaraju 算法
  • Tarjan 算法(真是哪都有他)

1.2.2 解决问题

使用 Kosaraju 算法 可求解 强连通分量,缩点。

使用 Tarjan 算法 可求解 强连通分量,割点,桥,点双连通分量,边双连通分量,缩点......

1.2.3 时间复杂度

定义图 $G$ 中共有 $n$ 个点, $m$ 条边。

Kosaraju 算法在图 $G$ 中求解 强连通分量 的复杂度为 $O(n+m)$

Tarjan 算法在在图 $G$ 中求解 强连通分量 的复杂度为 $O(n)$

1.2.4 代码实现

Kosaraju 算法

void dfs1(int u){
    if(vis[u])  return;
    vis[u] = 1;
    for(int i=0; i<G[u].size(); i++)
        dfs1(G[u][i]);
    S.push_back(u); 
}

void dfs2(int u){
    if(sccno[u])    return;
    sccno[u] = cnt;
    for(int i=0; i<rG[u].size(); i++)
        dfs2(rG[u][i]);
}
void Kosaraju(int n) {
    cnt = 0;
    S.clear();
    memset(vis,0,sizeof(vis));
    memset(sccno,0,sizeof(sccno));
    for(int i=1; i<=n; i++)
        dfs1(i);
    for(int i=n-1; i>=0; i--){
        if(!sccno[S[i]]){
            cnt++;
            dfs2(S[i]);
        }
    }
}

Tarjan 算法(写得丑死了呜呜)

inline void tarjan(int u) {
        low[u] = dfn[u] = ++cnt;
        s[++tp] = u, isin[u] = 1;
        int son=0;
        for(int i = g1.head[u]; i ; i = g1.next[i]) {
            son++;
            int v = g1.to[i];
            if(!dfn[v]) {
                tarjan(v);
                low[u] = min(low[u], low[v]);
                if(dfn[u] < low[v])b1.add(u, v);
                if((u != root && dfn[u] <= low[v])||(u==root&&son>1)) {
                    if(dfn[b] >= dfn[v])p[u] = 1;
                }

            } else if(isin[v]) low[u] = min(low[u], dfn[v]);
        }
        if(low[u] == dfn[u]) {
            ++ans;
            while(1) {
                long long v = s[tp--];
                isin[v] = 0;
                scc[v] = ans;
                sum[ans]++;
                if(u == v) break;
            }
        }
    }

2 所遇到的问题及解决方法

Q:在洛谷上过了的题在 NKOJ 上过不了怎么办?

A:骚扰zz***让他帮我调代码就过了。

Q:一道题调了半天发现输入没有输入对怎么办?

A:凉拌增加更多调试以获取更好的体验!

Q:提交题目的时候忘删调试甚至于把 OJ 卡炸了怎么办?

A:拒绝 std::cerr 从我做起。

这是这篇博客的第 $114$ 行。

posted @   changwenxuan  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示