[BZOJ1562/ZJOI2007]最大半连通子图

Description

Input

第一行包含两个整数N,M,X。N,M分别表示图G的点数与边数,X的意义如上文所述。接下来M行,每行两个正整数a, b,表示一条有向边(a, b)。图中的每个点将编号为1,2,3…N,保证输入中同一个(a,b)不会出现两次。

Output

应包含两行,第一行包含一个整数K。第二行包含整数C Mod X.

Sample Input

6 6 20070603
1 2
2 1
1 3
2 4
5 6
6 4

Sample Output

3
3

HINT

对于100%的数据, N ≤100000, M ≤1000000;对于100%的数据, X ≤10^8。

 

题目描述真复杂!一句话就可以描述完:给定一个有向图,请你求出它的一个最大的满足任意两点间至少有一条路径相连的导出子图,并统计个数(对P取模)。

 

 

题解:

  一个强连通分量要选肯定一起选。所以我们可以先Tarjan缩点(=>DAG)。DAG中两点之间至少有一条路径相连<=>这个DAG一定是一条链。重构图DP就行了(注意重边的情况,用map判一下)。
posted @ 2015-10-20 14:24  jinkun113  阅读(197)  评论(0编辑  收藏  举报