C.小埋养牛之牛吃饭问题求救

题目描述
小埋最近又在扩展新业务:养牛。小埋为了方便管理这些牛吃饭的问题,只有这些牛都在一个牧场的时候, 小埋才会给牛投喂食物,问小埋可以在几个牧场投喂食物。

小埋有 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 个赞

主要就是一个一个找过去,看看有哪些牧场是所有奶牛都能走到的,没有就输出零
(可是技术不过关啊 :melting_face:

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的数量,基本很难卡,

w32

2 个赞

膜拜

2 个赞