这个刚开始困扰了我好久。首先我们要知道在求BCC时我们建的时是无向图,就是说两个点之间有两条边,方向相反,而我们在存边的时候一般都是add(u,v)后立即add(v,u),也就是说我们存的边是相邻的,互为反边。而取反就是一个很神奇的东西,先看图。


tarjan为什么取反后就等于反边?_图论

如图下面的数据我们就可以看出一些有趣的地方了。

0与1取反是1,1与1取反是0,而偶数二进制最后一位是零,取反后变成1相当于加了1,而奇数二进制最后以为是1,取反后变成0,相当于减去1,这样就可以实现相邻的边相互转换了。