首页 > 其他分享 >Tarjan模板

Tarjan模板

时间:2024-07-18 20:40:37浏览次数:7  
标签:Tarjan int instk dfn low cntscc assign 模板

struct SCC {

    int top = 0, cntscc = 0, dfncnt = 0;
    vector<int> dfn, low, stk, instk;
    vector<int> sccnum, sccid;
    vector<vector<int>> g, scc;

    SCC(int n) {
        dfn.assign(n + 1, 0);
        low.assign(n + 1, 0);
        stk.assign(n + 1, 0);
        sccnum.assign(n + 1, 0);
        sccid.assign(n + 1, 0);
        instk.assign(n + 1, 0);
        g.resize(n + 1);
        scc.resize(n + 1);
    }

    void add(int u, int v) {
        g[u].push_back(v);
    }

    void tarjan(int u) {
        dfn[u] = low[u] = ++dfncnt;
        stk[++top] = u;
        instk[u] = 1;

        for (auto v : g[u]) {
            if (!dfn[v]) {
                tarjan(v);
                low[u] = min(low[u], low[v]);
            } else if (instk[v]) {
                low[u] = min(low[u], low[v]);
            }
        }

        if (dfn[u] == low[u]) {
            cntscc ++;
            int v;
            do {
                v = stk[top --], instk[v] = 0;
                sccid[v] = cntscc;
                scc[cntscc].push_back(v);
                sccnum[cntscc] ++;
            } while (u != v);
        }
    }

};

标签:Tarjan,int,instk,dfn,low,cntscc,assign,模板
From: https://www.cnblogs.com/Kescholar/p/18310410

相关文章

  • mysql触发器模板
    --当我们对dept表中的数据进行insertdeleteupdate的时候,请将这些操作记录到日志表当中--dept的表结构/*CREATETABLE`dept`(`DEPTNO`intNOTNULLCOMMENT'部门编号',`DNAME`varchar(14)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMEN......
  • c++ primer plus 第16章string 类和标准模板库,16.2.1 使用智能指针
    c++primerplus第16章string类和标准模板库,16.2.1使用智能指针c++primerplus第16章string类和标准模板库,16.2.1使用智能指针文章目录c++primerplus第16章string类和标准模板库,16.2.1使用智能指针16.2.3uniqueptr为何优于autoptr16.2.3unique......
  • c++ primer plus 第16章string 类和标准模板库,16.2.2 有关智能指针的注意事项
    c++primerplus第16章string类和标准模板库,16.2.2有关智能指针的注意事项c++primerplus第16章string类和标准模板库,16.2.2有关智能指针的注意事项文章目录c++primerplus第16章string类和标准模板库,16.2.2有关智能指针的注意事项16.2.2有关智能指针的......
  • 字典树模板
    把数据都存在一个TrieNode数组里,只保存其指向关系。classTrieNode{public:boolend;vector<int>son;TrieNode(){end=false;son=vector<int>(26,-1);}};classTrie{public:vector<TrieNode>tree;Trie(){......
  • STL(标准模板库)理论基础
    STL标准模板库理论基础基本概念容器容器的分类迭代器算法迭代器C++标准库标准库中与语言支持功能相关的头文件支持流输入/输出的头文件与诊断功能相关的头文件定义工具函数的头文件支持字符串处理的头文件定义容器类的模板的头文件支持迭代器的头文件有关算法的头文件有......
  • [题解]P1452 【模板】旋转卡壳 | [USACO03FALL] Beauty Contest G
    P1452【模板】旋转卡壳|[USACO03FALL]BeautyContestG旋转卡壳模板题。凸包用的是Andrew算法,就不详述了,具体可以查查资料了解,但提一嘴Andrew算法的一些细节问题:Andrew算法的一些细节Andrew算法的模板代码如下:sort(a+1,a+1+n,cmp);st[++top]=1;for(inti=2;i<=n;i++){ ......
  • SpringBoot与Thymeleaf模板技术整合
    以下是一个简单的SpringBoot整合Thymeleaf的入门案例:1.创建一个SpringBoot项目,并添加Thymeleaf依赖。org.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-web2.在src/main/resources/templates目录下创建一个HTML模......
  • 易优CMS模板标签collect文档收藏
    [基础用法]标签:collect描述:文档收藏/取消标签用法:{eyou:collectid="collect"cancel="加入收藏"collect="已收藏"}<a{$collect.onclick}>{$collect.cancel}</a>收藏数:<span{$collect.numId}></span>次{$collect.hidden}{/eyou:c......
  • STM32寄存器操作、模板构建
    2024年7月18日发布于博客园,本文涉及到STM32F4XX和STM32F1XX系列目录外设寄存器查找①名称②偏移地址③寄存器位表④位功能说明寄存器基本操作C语言的置位和清零具体方法设置GPIO流程给寄存器赋值带参数宏STM32F1xx芯片识别存储器映射寄存器映射让GPIOB端口的16个引脚输......
  • 杭州外贸网站建设 最好用wordpress模板来搭建
    防护服wordpress外贸网站模板消防服、防尘服、隔热服、防化服、防静电服、电焊服wordpress外贸网站模板。https://www.jianzhanpress.com/?p=4116工业品wordpress外贸网站模板机械及行业设备、五金工具、安全防护、包装、钢铁、纺织皮革等工业品wordpress外贸网......