题目描述
小埋最近又在扩展新业务:养牛。小埋为了方便管理这些牛吃饭的问题,只有这些牛都在一个牧场的时候, 小埋才会给牛投喂食物,问小埋可以在几个牧场投喂食物。
小埋有 k 只牛,分布在 n 个牧场,n 个牧场之间相互有 m 条单向边的道路,牛可以通过道路在牧场与牧场之间移动。
输入格式
第一行三个整数:k, n, m 分别代表牛的数量,牧场的数量,以及道路的数量。
接下来 k 个数,分别是 k 只牛所在的牧场编号。
接下来是 m 行,每行两个牧场编号 u, v,代表 u 到 v 有一条单向边。
输出格式
一个整数,代表小埋能够投喂的牧场数量。
样例
Input 1
2 4 4
2
3
1 2
1 4
2 3
3 4
Output 1
2
数据范围
1≤k≤100
1≤n≤1000
1≤m≤10000
样例解释
对于样例:牛初始在 2, 3,当它们都在 3 号或者 4 号牧场时,小埋会给牛投喂食物。
2 个赞
你的思路是什么
1 个赞
主要就是一个一个找过去,看看有哪些牧场是所有奶牛都能走到的,没有就输出零
(可是技术不过关啊
)
1 个赞
你不妨这么想一下,对于每个点 i ,可以看一下它可以到哪个地点,然后将它归入另一个有牛的地方,以此类推。
不保证一定正确。
2 个赞
bitset求个传递闭包?
\mathcal{O}(n^2)
2 个赞
或者你先缩点,然后跑拓扑求传递闭包,这样是 \mathcal{O}(n+m) 的,然后找到有牛的scc都能到的点(bitset &),然后加他们的size
2 个赞
应该是线性的
2 个赞
先建反图,搜所有点,跑dfs去搜能到哪些点,并判断能不能到所有牛的点
有亿点绕
1 个赞
你这复杂度不是线性吧
虽然可过
2 个赞
对
1 个赞
草 不是线性的
\mathcal{O}\left(\dfrac{n^2}{w} \right)
但这里 n 是scc的数量,基本很难卡,
w 取 32
2 个赞
膜拜
2 个赞