#include<bits/stdc++.h>#defineDEBUGfprintf(stderr,"Passing [%s] line %d\n", __FUNCTION__,__LINE__)#defineFile(x)freopen(x".in","r",stdin);freopen(x".out","w",stdout)usingnamespace std;typedeflonglong LL;typedef pair <int,int> PII;typedef pair <int, PII> PIII;template<typenameT>inline T gi(){
T f =1, x =0;char c =getchar();while(c <'0'|| c >'9'){if(c =='-') f =-1; c =getchar();}while(c >='0'&& c <='9') x = x *10+ c -'0', c =getchar();return f * x;}constint INF =0x3f3f3f3f, N =5003, M = N <<1;int n, m, s;int tot, head[N], ver[M], nxt[M];int dfn[N], low[N], tim, stk[N], tp, id[N], scc_cnt;bool in_stk[N];int du[N];inlinevoidadd(int u,int v){ver[++tot]= v, nxt[tot]= head[u], head[u]= tot;}voidTarjan(int u){
dfn[u]= low[u]=++tim, stk[++tp]= u, in_stk[u]=true;for(int i = head[u]; i; i = nxt[i]){int v = ver[i];if(!dfn[v]){Tarjan(v);
low[u]=min(low[u], low[v]);}elseif(in_stk[v]) low[u]=min(low[u], dfn[v]);}if(dfn[u]== low[u]){++scc_cnt;int y =-1;do{
y = stk[tp--];
id[y]= scc_cnt;
in_stk[y]=false;}while(y != u);}}intmain(){// File("");
n =gi<int>(), m =gi<int>(), s =gi<int>();for(int i =1; i <= m; i+=1){int u =gi<int>(), v =gi<int>();add(u, v);}for(int i =1; i <= n; i+=1)if(!dfn[i])Tarjan(i);for(int u =1; u <= n; u+=1)for(int i = head[u]; i; i = nxt[i]){int v = ver[i];if(id[u]!= id[v])++du[id[v]];}int cnt =0;for(int i =1; i <= scc_cnt; i+=1) cnt +=(du[i]==0);printf("%d\n", cnt -(du[id[s]]==0));return0;}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容