题号:NC213817
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
给定有向图G=(V,E)。设P 是G 的一个简单路(顶点不相交)的集合。如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖。P 中路径可以从V 的任何一个顶点开始,长度也是任意的,特别地,可以为0。G 的最小路径覆盖是G 的所含路径条数最少的路径覆盖。
设计一个有效算法求一个有向无环图G 的最小路径覆盖。
提示:设V={1,2,..... ,n},构造网络G1=(V1,E1)如下:
%3Ai%5Cin%20V%5C%7D%5Ccup%5C%7B(y_i%2Cy_0)%3Ai%5Cin%20V%5C%7D%5Ccup%5C%7B(x_i%2Cy_i)%3A(i%2Cj)%5Cin%20E%5C%7D)
每条边的容量均为1。求网络G1的(x0,y0)最大流。
编程任务:对于给定的给定有向无环图G,编程找出G的一个最小路径覆盖。
输入描述:
第1 行有2个正整数n和m。n是给定有向无环图G 的顶点数,m是G 的边数。接下来的m行,每行有2 个正整数i和j,表示一条有向边(i,j)。
输出描述:
程序运行结束时,将最小路径覆盖输出。从第1 行开始,每行输出一条路径。文件的最后一行是最少路径数。
示例1
输入
复制
11 12
1 2
1 3
1 4
2 5
3 6
4 7
5 8
6 9
7 10
8 11
9 11
10 11
输出
复制
1 4 7 10 11
2 5 8
3 6 9
3
备注:
1≤n≤150,1≤m≤6000