tarjan模板

来源:互联网 发布:韩国娱乐圈爆料知乎 编辑:程序博客网 时间:2024/04/28 01:13

今天下午就只看了一下tarjan算法。。。。妈蛋。。。太颓废了。。。这样不好不好~~

#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;int root[10000],ans,cnt,scc,top;int dfn[10000],low[10000];int s[100000],belong[10000];bool vis[10000];struct node{    int e,next;}a[10000];void add(int s,int e){    a[++ans].e=e;    a[ans].next=root[s];    root[s]=ans;}void tarjan(int u){    dfn[u]=low[u]=++cnt;    vis[u]=1;    s[top++]=u;    int v;    for(int i=root[u];i!=-1;i=a[i].next)    {        v=a[i].e;        if(dfn[v]==0)        {            tarjan(v);            low[u]=low[u]>low[v]?low[v]:low[u];        }        else if(vis[v] && low[u]>dfn[v])        low[u]=dfn[v];    }    if(dfn[u]==low[u])    {        ++scc;        do        {            v=s[--top];            vis[v]=0;            belong[v]=scc;        }while(u!=v);    }}int main(){    int k=8;    ans=cnt=scc=top=0;   // top=0,cnt=0;   ans=-1;    memset(root,-1,sizeof(root));    memset(dfn,0,sizeof(dfn));    memset(low,0,sizeof(low));    memset(belong,-1,sizeof(belong));    while(k--)    {        int s,e;        scanf("%d%d",&s,&e);        add(s,e);    }    tarjan(1);    for(int i=1;i<=6;i++)    {        printf("%d  %d\n",i,belong[i]);    }    system("pause");    return 0;}


原创粉丝点击