题目没读懂...看了别人的结题报告才知道是要判断是否为弱连通图
u与v之间,只要u->v和v->u之间至少存在一条边就可以了
对于有向图,强连通分量中的点必然满足,所以先缩点,再拓扑排序求最长链,最长链的顶点数如果等于缩点后的顶点数,则为弱连通图
简单证明:首先,如果最长链上的顶点数等于DAG图的顶点数,则所有顶点在一棵树上,从根节点可以到达任意节点,任意顶点对直接至少存在一条边
如果最长链上的顶点数小于DAG图的顶点数,假设i不在最长链上,则最长链上存在点对x,y,x和y之间不存在边相连:
1.如果最长链与i所在的链不相交,显然的
2.如果最长链与i所在的链相交,有几种情况,自己画画就知道,认为点i之前的点为i的前驱点,点i之后的点为i的后继点,设j为相交的点,则两条链中,必然存在一种情形:j的某些前驱节点和后继节点相互不可达
如果本身就不是弱连通图的话,必定存在i,j,之间没有边,那么最长链的顶点数肯定小于缩点后的顶点数
代码: