随笔 - 200  文章 - 0  评论 - 13  阅读 - 10万

tarjan算法模版

复制代码
 1 #include<iostream>
 2 #define num 5000
 3 #include<cstring>
 4 using namespace std;
 5 
 6 int n,m;
 7 int f[num];
 8 
 9 
10 typedef struct{
11         int u,v,next;
12         }z;z edg[num];
13 int edgs=0,head[10000];
14 void Addedg(int a,int b){
15      edgs++;
16      edg[edgs].u=a;edg[edgs].v=b;
17      edg[edgs].next=head[a];
18      head[a]=edgs;
19      }
20 
21 void Init(){
22      cin>>n>>m;
23      for(int i=1;i<=n;++i)
24      f[i]=i;
25      
26      memset(head,-1,sizeof(head));
27      for(int i=1;i<=m;++i)
28      {
29        int a,b;
30        cin>>a>>b;
31        Addedg(i,b);
32              }
33      }
34 
35 bool mark[10000],vis[10000];
36 int cordnode[100000],top=-1,times=0;
37 int mintime[100000];
38 void Dfs(int k){
39      int now;
40      now=mintime[k]=times++;
41      vis[k]=1;
42      cordnode[++top]=k;
43      
44      for(int i=head[k];i!=-1;i=edg[i].next)
45      {
46        int v=edg[i].v;
47        if(mark[v]) continue;
48        if(!vis[v]) Dfs(v);
49        if(mintime[k]>mintime[v]) 
50        mintime[k]=mintime[v]; 
51              }
52      
53      if(mintime[k]==now)
54      {
55        while(cordnode[top]!=k)
56        {
57          f[cordnode[top]]=k;
58          mark[cordnode[top]]=1;
59          top--;               
60                               } 
61        f[cordnode[top]]=k;
62        top--; 
63                         }
64      
65      
66      }
67 
68 int main()
69 {
70     Init();
71     
72     for(int i=1;i<=n;++i)
73     if(!mark[i]) Dfs(i);
74     
75     int p[10000]={0};
76     
77     for(int i=1;i<=n;++i)
78     p[f[i]]=1;
79     int ans=0;
80     for(int i=1;i<=n;++i)
81     if(p[i]) ans++;
82     cout<<ans<<endl;
83     system("pause");
84     
85     } 
复制代码
posted on   怡红公子  阅读(223)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· MQ 如何保证数据一致性?
< 2012年10月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示