题目链接
Skelectons
题目大意:在一个n个点,m条边,每个点上都有一个炸弹人,炸弹人可以任意选一个点去炸,但是每个点只能被一个炸弹人选择。问给定有向图是否可以在一个正整数时间里刚好把所有点炸毁。
解题思路:刚开始在看到这题时,因为只要图是一个强连通图就行,后面发现不对。
我们需要保障每个环之间的节点数的gcd为1(因为只有只样我们才可以利用环节点数差的达到我们想要的结果),才可能符合炸弹人任意选择一个节点作为目标节点去炸的要求
所以,首先我们需要判断图是否连通,不连通肯定不行
其次我们求出每个环的节点数,然后依次gcd,看最终ans是否是1
那么问题来了?
如何求出每个环的节点数?这里采取两次dfs求各点深度,一次正向dfs,一次反向建边,然后再次dfs,这样对于某条边,我们就可以求出其所在环的总节点数=两个端点(这里是指边的起点,因为反向建边了)深度和 - 1
AC代码如下:
#include <iostream>
#include <cstdio>
#includ