POJ 1236
题目大意:有n间学校,他们之间存在一些网络线路, 例如a->b 则是学校a可以传递信息到学校b(单向), 现在有一个软件需要被传达, 拷贝给一个学校, 让它去通过线路传给其他学校。问最少要拷贝给多少间学校, 是所有学校都可以被传到到(问题1), 问题二则是至少要构建多少条线路, 使得随便给一个学校软件, 都可以传达到其他学校?
解:囧, 效率好慢。正解是用强连通分量算法缩点, 然后问题一是对应找入度为零的点的个数(显然, 入度为零则没人传递, 要作为一个源点), 这个倒是想出来了。而问题二自己犯傻×想错了性质, 我是找入度为零的点*2+有入度的点*1…, 这个显然不适用。 正确做法是在入度为零和出度为零的点找最大的那个(因为如果可以互相连通, 这两种点都不可能存在, 入度为零则是其他人到不了, 出度为零则是到不了其他人, 所以一直连边即可解决问题, 而入度零连出度零即可, 所以是取二者的最大值。特殊的, 当缩点后只剩下一个点, 则不用连边了, 答案是0非1!
Tarjan版本也已经完成。