
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 }

【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· MQ 如何保证数据一致性?