博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 999E Reachability from the Capital targan+缩点
阅读量:3903 次
发布时间:2019-05-23

本文共 1988 字,大约阅读时间需要 6 分钟。

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

Note

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 .

 题意:

给出一幅图, 求再加几条边能够使首都都能够到达所有城市。 。。

先用targan+ 缩点, 将所有的连通分量缩成一个点, 统计除了首都所在的缩点入度为0的个数。 。

代码如下:

 

#include 
#include
#include
#include
#include
#include
using namespace std;const int maxn=5e3+5;vector
ve[maxn];int ccnc[maxn],in[maxn];stack
s;int n,m,ss;int low[maxn],dfn[maxn];int tot,ccnum,sum=0;void init(){ ccnum=tot=0; memset (in,0,sizeof (in)); memset (low,0,sizeof(low)); memset (dfn,0,sizeof(dfn)); memset (ccnc,0,sizeof(ccnc));}void targan (int x){ low[x]=dfn[x]=++tot; s.push(x); for (int i=0;i

 

转载地址:http://ktaen.baihongyu.com/

你可能感兴趣的文章
显示python库路径
查看>>
android简单demo学习系例之排版(LinearLayout)[xml-based]
查看>>
J2ME相关的开源项目
查看>>
android简单demo学习系例之排版(TableLayout)[code-based]
查看>>
android简单demo学习系例之排版(TableLayout)[xml-based]
查看>>
bash日期格式转换(去掉无意义的零)的可选方法
查看>>
常用计算机端口解释
查看>>
转载)保护眼睛,把电脑窗口背景设置成绿颜色
查看>>
FireFox 的强大Web开发插件
查看>>
MIME相关
查看>>
WAP1.0与WAP2.0页面的DTD
查看>>
如何学好C++语言
查看>>
包的设计原则
查看>>
回顾时光 详解HTML的发展史
查看>>
用移动硬盘安装win7
查看>>
MinGW与Cygwin
查看>>
用WEB标准进行开发
查看>>
[译]关于Android图形系统的一些事实真相
查看>>
J2ME下的Zlib/Gzip/Zip压缩相关
查看>>
Android 模拟器中AVD路径的修改(WIN7)
查看>>