Tarjan

[USACO06JAN] The Cow Prom S - 洛谷

思路:纯模板.

cpp 复制代码
int n,m;
vector<int> vct[10004];
int dfn[10004],low[10004],tot=0;   //时间戳,回溯值
int stk[10004],instk[10004],top=0; //模拟栈
int ssc[10004],siz[10004],id=0;  //记录点在哪个强连通分量,记录强连通分量的大小,强连通分量的编号
void tarjan(int x){
    //进
    dfn[x]=low[x]=++tot;
    stk[++top]=x,instk[x]=1;
    //回
    for(auto v:vct[x]){
        if(!dfn[v]){
            tarjan(v);
            low[x]=min(low[x],low[v]);
        }
        else if(instk[v]) low[x]=min(low[x],low[v]);
    }
    //离
    if(dfn[x]==low[x]){
        int y; id++;
        do{
            y=stk[top--],instk[y]=0;
            ssc[y]=id;
            ++siz[id];
        }while(y!=x);
    }
}
tarjan模板
https://www.luogu.com.cn/problem/P2863
void solve(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int u,v; cin>>u>>v;
        vct[u].emplace_back(v);
    }
    //不一定是连通的有向图
    for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
    int ans=0;
    for(int i=1;i<=id;i++) siz[i]>1?ans++:0;
    cout<<ans;
}
相关推荐
肥猪猪爸14 分钟前
TextToSql——Vanna的安装与使用
人工智能·python·算法·机器学习·大模型·ollama·vanna
谈笑也风生38 分钟前
经典算法题详解之切分数组(一)
数据结构·算法·leetcode
松涛和鸣41 分钟前
28、Linux文件IO与标准IO详解:从概念到实战
linux·网络·数据结构·算法·链表·list
长安er1 小时前
LeetCode 167/15 两数之和与三数之和-双指针1
算法·leetcode·双指针·两数之和·三数之和
Hello娃的1 小时前
【神经网络】反向传播BP算法
人工智能·神经网络·算法
lynnlovemin1 小时前
从暴力到高效:C++ 算法优化实战 —— 排序与双指针篇
java·c++·算法
jinxinyuuuus1 小时前
快手在线去水印:短链解析、API逆向与视频流的元数据重构
前端·人工智能·算法·重构
Flash.kkl1 小时前
优先算法专题十五——BFS_FloodFill
算法·宽度优先
高洁012 小时前
向量数据库拥抱大模型
python·深度学习·算法·机器学习·transformer
慕容青峰2 小时前
牛客小白月赛 103 C 题题解
c++·算法·sublime text