【有向图Tarjan缩点】为什么搜索时遇到栈内的点时不和low[v]取最小值?
  • 板块学术版
  • 楼主George_Plover
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/5/22 10:34
  • 上次更新2023/11/7 02:02:43
查看原帖
【有向图Tarjan缩点】为什么搜索时遇到栈内的点时不和low[v]取最小值?
34329
George_Plover楼主2020/5/22 10:34

Tarjan 的板子已经用了很长一段时间了,但是初学时候的一个问题还没想通:

void Tarjan(int x)
{
    dfn[x]=low[x]=++num;
    vis[x]=instk[x]=1;
    stk[++cnt]=x;
    for(int i=pre[x];i;i=lin[i])
    {
        int v=to[i];
        if(!vis[i])
        {
            Tarjan(v);
            low[x]=min(low[v],low[x]);
        }
        else if(instk[v])
            low[x]=min(low[x],dfn[v]);
    }
    if(low[x]==dfn[x])
    {
        int t;
        SCC++;
        do
        {
            t=stk[cnt--];
            belong[t]=SCC;
            instk[t]=0;
        }while(t!=x);
    }
}

为什么在点v是栈内点的时候,low[x]不和low[v]取最小值呢?网上很大一部分模板写的都是和dfn[v]取最小值。

2020/5/22 10:34
加载中...