【问题描述】
给出 n (编号为1..n)个顶点,m 条边的有向图,请完成下列任务:
任务1、计算并输出图的强连通分量数。
任务2、计算并输出图的最大强连通分量。
【输入格式】
第一行两个整数 n 表示有n个点。接下来的 n 行,第i+1行表示点i发出的有向边,其中第k个数表示i出发的第k条有向边的另一个顶点,0表示结束。
【输出格式】
第 1 行:一个整数,表示图的强连通分量数;
第 2 行:一个整数,表示图的最大强连通分量;
【输入样例】
6
2 4 0
0
2 5 0
2 5 0
1 2 0
3 5 0
【输出样例】
4
3
【数据范围】
n<=10000 m<=50000
【来源】
Mr_He原创
分析:这是一道很简单的强连通分量题目,并未经过任何包装,可采用传递闭包和两次DFS两种方法求解,然而从数据范围来看,传递闭包显然不能完成100%的数据,所以建议采用两次DFS的方法进行解答。
两次DFS代码如下:
#include<cstdio>
#include<vector>