题目描述

There are nn cities and mm roads in Berland. Each road connects a pair of cities. The roads in Berland are one-way.

What is the minimum number of new roads that need to be built to make all the cities reachable from the capital?

New roads will also be one-way.

Input

The first line of input consists of three integers nn, mm and ss (1≤n≤5000,0≤m≤5000,1≤s≤n1≤n≤5000,0≤m≤5000,1≤s≤n) — the number of cities, the number of roads and the index of the capital. Cities are indexed from 11 to nn.

The following mm lines contain roads: road ii is given as a pair of cities uiui, vivi (1≤ui,vi≤n1≤ui,vi≤n, ui≠viui≠vi). For each pair of cities (u,v)(u,v), there can be at most one road from uu to vv. Roads in opposite directions between a pair of cities are allowed (i.e. from uu to vv and from vv to uu).

Output

Print one integer — the minimum number of extra roads needed to make all the cities reachable from city ss. If all the cities are already reachable from ss, print 0.

Examples

Input

9 9 11 21 32 31 55 66 11 89 87 1

Output

3

Input

5 4 51 22 33 44 1

Output

1

The first example is illustrated by the following:

For example, you can add roads (6,46,4), (7,97,9), (1,71,7) to make all the cities reachable from s=1s=1.

The second example is illustrated by the following:

In this example, you can add any one of the roads (5,15,1), (5,25,2), (5,35,3), (5,45,4) to make all the cities reachable from s=5s=5.

题解:

强连通缩点后统计入度为0的个数ans,然后看首都的入度是否为0;如果是则ans-1;

 1 #include<cstdio>
 2 #include <algorithm>
 3 #include <stack>
 4 #include <vector>
 5 #include <cstring>
 6 using namespace std;
 7
 8 const int MAXN=1e5+10;
 9 const int inf=0x3f3f3f3f;
10 struct node{
11     int to;
12     int next;
13 }edge[MAXN*4];
14 int head[MAXN];
15 int val[MAXN];
16 bool instack[MAXN];
17 int cnt;
18 int dfn[MAXN],low[MAXN];
19 int sum[MAXN];
20 void add(int x,int y)
21 {
22     edge[++cnt].to =y;
23     edge[cnt].next=head[x];
24     head[x]=cnt;
25 }
26 int Time,num;
27 stack<int >st;
28 int du[MAXN];
29 int color[MAXN];
30 int x[MAXN],y[MAXN];
31 void tarjan(int u)
32 {
33     dfn[u]=low[u]= ++Time;
34     st.push(u);
35     instack[u]=true;
36     for (int i = head[u]; i !=-1 ; i=edge[i].next) {
37         int v=edge[i].to;
38         if(!dfn[v]){
39             tarjan(v);
40             low[u]=min(low[u],low[v]);
41         }
42         else if(instack[v]) low[u]=min(low[u],dfn[v]);
43     }
44     if(dfn[u]==low[u])
45     {
46         int x;
47         num++;
48         while(1) {
49             x=st.top();
50             st.pop();
51             color[x]=num;
52             instack[x]=false;
53             if(x==u) break;
54         }
55
56     }
57 }
58
59 int main()
60 {
61     int n,m,s;
62     scanf("%d%d%d",&n,&m,&s);
63     cnt=0;
64     memset(head,-1,sizeof(head));
65     memset(instack,false, sizeof(instack));
66     memset(sum, 0,sizeof(sum));
67     for (int i = 1; i <=m ; ++i) {
68         scanf("%d%d",&x[i],&y[i]);
69         add(x[i],y[i]);
70     }
71     for (int i = 1; i <=n ; ++i) {
72         if(!dfn[i]) tarjan(i);
73     }
74     for (int i = 1; i <=m ; ++i) {
75         if(color[x[i]]!=color[y[i]])
76         {
77             du[color[y[i]]]++;
78         }
79     }
80
81     int ans=0;
82     for (int i = 1; i <=num ; ++i) {
83         if(du[i]==0) ans++;
84     }
85     if(du[color[s]]==0) ans--;
86     printf("%d\n",ans);
87     return 0;
88 }

View Code

  

转载于:https://www.cnblogs.com/-xiangyang/p/9341449.html

Reachability from the Capital相关推荐

  1. Codeforces Round #490 (Div. 3)【完结】

    2022.3.3 题单地址:https://codeforces.com/contest/999 目录 A. Mishka and Contest[模拟] B. Reversing Encryptio ...

  2. Codeforces Round #490 (Div. 3)

    GET reverse() ve.pop_back() ve.back() A. Mishka and Contest 题意 给定一个序列表示题目的难度和Mishka的能力,问Mishka能解决几道问 ...

  3. 20190919CF训练

    A.Border 给你一堆数字,你可以从这些数字取出任意多个组合成一个新的数字,问你这个新的数字在k进制下的最后一位一共有多少种情况 首先考虑k进制下的最后一位是这个数字对k取余,然后有一个扩展贝祖定 ...

  4. Codeforces 进阶计划:从 Specialist 到 Expert

    训练计划:做 Codeforces Round (Div. 2).Codeforces Round (Div. 3) 和 Educational Codeforces Round 通过人数少于 100 ...

  5. 汽车高级驾驶辅助系统ADAS激光雷达创新者Cepton与Growth Capital达成企业合并协议

    汽车高级驾驶辅助系统 (ADAS) 和车辆自动驾驶领域光感测距技术(激光雷达)的创新者Cepton Technologies, Inc.(以下简称"Cepton")将与Growth ...

  6. R语言ggplot2进行特定国家或者地区的地图可视化、在地图上标出所有首府城市所在地(plot the locations of the capital cities)

    R语言ggplot2进行特定国家或者地区的地图可视化.在地图上标出所有首府城市所在地(plot the locations of the  capital cities) 目录

  7. Onchain Capital创始人看涨BCH

    BCH作为一种主流的加密货币得到了越来越多人的认可,其中不乏一些知名的业界大佬,就比如Onchain Capital的创始人,同时也是CNBC非洲"Crypto Trader"节目 ...

  8. 美国新桥投资集团(Newbridge Capital) [from baike]

    美国新桥投资集团(Newbridge Capital) 亚洲最大的私人股权投资机构之一  美国新桥投资集团官方网站网址:http://www.newbridgecapital.com 新桥集团于199 ...

  9. 药师帮完成1.33亿美元D轮融资,投资方为老虎环球基金、H Capital和DCM

    12月17日消息,药师帮对外宣布完成1.33亿美元D轮融资,投资方为老虎环球基金.H Capital和DCM. 此前,药师帮已经获得过多轮融资,详情见下表: 药师帮是一家医药B2B第三方平台,其所属公 ...

最新文章

  1. 【Android 高性能音频】Oboe 播放器开发 ( 为 OpenSL ES 配置参数以获得最佳延迟 | Oboe 音频流 | Oboe 音频设备 )
  2. 心事一件件的了掉,希望一切都能恢复到正常
  3. php 注册自动登录,php – 创建第二个自动登录用户的登录页面
  4. 【CodeForces - 260B 】Ancient Prophesy (暴力匹配,BF算法,日期字符串)
  5. 定了!这个专业研究生扩招,博士生待遇要提高!已有多所高校新增…
  6. web登录时候加入过滤器的用法
  7. 时序分析基本概念介绍——SDC概述
  8. switch日文键盘打中文_从塞尔达到动森,游戏中使用的中文字体有什么问题?
  9. 游戏热更新:游戏客户端热更新那点事
  10. 阿里云SLB配置HTPPS方式访问
  11. APP乱查征信?小心你的隐私被卖了!
  12. java网络编程---使用URL爬取歌曲
  13. 一文学会LaTeX基础
  14. 纯HTML代码绘制表格--初入HTML1
  15. Poc/Exp漏洞验证利用脚本编写
  16. 充电速度公式_新能源汽车充电速度多快算快充?
  17. 线上教育核心竞争力是什么?声网发布在线素质、职业教育解决方案
  18. StringUtil:字符串处理的工具类
  19. Web视频播放与数据安全
  20. 《大象 Thinking in UML》读后感

热门文章

  1. 访问控制权限和 ------java命名规范
  2. SysUtils.StrLCat
  3. 【MyBatis笔记】03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询
  4. 软件测试学习指南(更新中)
  5. 再复杂的报表,用这3种方式,都能解决!
  6. Flash务实主义——Loading
  7. s:TextInput优化
  8. 饿了么超时20分钟_饿了么:5分钟;美团:8分钟......消费者:???
  9. IREC-GAN:在线推荐中基于模型的对抗训练强化学习
  10. 从GCN中学习的信息熵