题目链接
方法:强连通分量 + 缩点
题目分析
题目大意
有一群牛,如果a认为b出名,且b认为c出名,则a认为c出名。给出m个这种关系,问存在多少头牛,被每一头牛都认为出名?
解析
首先很明显,是一道图的题目。
有向图的强连通分量的定义是:在该分量中,任意两个点(u, v)
之间都有一条有向路径使u通向v。
那么我们可以将图中的每一个强连通分量缩为一个点,然后对于点进行建立有向边,形成DAG。我们需要找的是有且仅有的出度为0
的点。
手画一下也可以想明白,这篇文章说的很详细,摘录两段如下:
可不可能DAG中有两个点(分量)是满足要求的?(即分量中的所有点都是其他点可到达的)不可能,因为这两个分量如果互相可达,就会合并成一个分量.
会不会出现就算出度为0的点只有一个,但是DAG中的其他点到不了该出度为0的点,那么也应该输出0呢?如果DAG其他的点到不了出度为0的点,那么其他点必然还存在一个出度为0的点.矛盾.
代码
1 |
|