Tarjan 模板

原创 2018年04月16日 21:59:16
#include <bits/stdc++.h>
#define LL long long
using namespace std;

#define maxn 200007
const int INF=0x3f3f3f3f;


int DFN[maxn],low[maxn],num,index;
bool inStack[maxn];
vector <int> G[maxn];
stack <int> S;
int in[maxn],belong[maxn];
void Tarjan(int u)
{
    int v;
    DFN[u]=low[u]=index++;
    inStack[u]=true;
    S.push(u);
    for(int i=0;i<G[u].size();i++)
    {
        v=G[u][i];
        if(!DFN[v])
        {
            Tarjan(v);
            low[u]=min(low[u],low[v]);
        }
        else if(inStack[v])
        {
            low[u]=min(low[u],DFN[v]);
        }
    }
    if(DFN[u]==low[u])
    {
        num++;
        do
        {
            v=S.top();
            S.pop();
            belong[v]=num;
        }while(v!=u);
    }
}

void SCC(int n)
{
    for(int i=1;i<=n;i++)
    {
        if(!DFN[i])
        {
            Tarjan(i);
        }
    }
}

int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)&&(n||m))
    {
        int a,b;
        memset(DFN,0,sizeof(DFN));
        memset(low,0,sizeof(low));
        index=num=0;
        for(int i=0;i<=n;i++)
        {
            G[i].clear();
        }
        while(m--)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            G[a].push_back(b);
        }
        SCC(n);
        if(num==1) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

强连通分量-tarjan算法模板详解

这里主要给出以为大牛的分析,但是大牛的模板代码没有注释,我也比较笨,还是看了很久,这里给出模板的详细注释...
  • ZYY173533832
  • ZYY173533832
  • 2013-10-10 19:05:30
  • 3005

震惊!史上最全的tarjan模板!99%的人都不知道!

tarjan
  • chai_jing
  • chai_jing
  • 2017-04-12 21:16:20
  • 851

LCA 离线算法 tarjan 总结 与模板题

LCA问题为最近公共祖先问题,常见的有一种在线的算法和一种离线的算法。这里介绍一下离线的tarjan算法。 离线算法需要首先读入所有的查询,然后重新组织对查询处理的顺序来达到更高效的处理。 tar...
  • liujc_
  • liujc_
  • 2016-03-13 16:04:56
  • 923

tarjan模板(缩点,求有向图强连通分量)

整理出了这个tarjan模板,具体数组的功能代码都有注释。 const int N=100010; struct data { int to,next; } tu[N*2]; int head...
  • martinue
  • martinue
  • 2016-05-04 15:53:49
  • 1693

无向图的点双连通分量(tarjan模板)

#include #include #include #include #include #include using namespace std; #define maxn 7500 #define...
  • u013497977
  • u013497977
  • 2015-08-01 17:38:36
  • 1376

LCA离线tarjan算法模板

//并查集记录父亲的数组. int father[MAXN]; //并查集的查找函数,有路径压缩功能. int find ( int x ) { return father[x] == x ...
  • qq_24451605
  • qq_24451605
  • 2015-01-25 14:10:35
  • 499

POJ 2186【Tarjan算法(模板_缩点)】

//在一张有向无环图G,图G会包含很多环(环里面的点是等价的), //当然可以把环缩成一个点(利用tarjan缩点), //形成一棵树,题目要求是求除他以外的点都指向他,也就是只有一个叶子。 //因为...
  • KEYboarderQQ
  • KEYboarderQQ
  • 2016-05-15 10:13:25
  • 1022

tarjan离线算法-LCA最近公共祖先算法模板(详细)

/********************************************/ /*****LCA最近公共祖先离线算法(tarjan)*****/ /******************...
  • mengxingyuanlove
  • mengxingyuanlove
  • 2015-05-05 22:00:40
  • 815

tarjan(SCC)模板

hdu 1269即模板题,缩完点后判断点数是否为1即可。 图论题一定要记着memset(head,-1,sizeof(head))(如果题目不含0号点也可以memset成0),否则就坐等TLE吧。。...
  • KGV093
  • KGV093
  • 2017-07-30 14:17:58
  • 275

求割点模板(tarjan算法思路)

想看更多模板,请点击:http://blog.csdn.net/martinue/article/category/6268283 贴上求割点模板: const int N=110; struct d...
  • martinue
  • martinue
  • 2016-05-04 14:08:47
  • 1644
收藏助手
不良信息举报
您举报文章:Tarjan 模板
举报原因:
原因补充:

(最多只允许输入30个字)