采用深度优先搜索进行拓扑排序,获取拓扑序列的同时计算各顶点事件的最早发生时间,然后逆序计算各顶点事件的最晚发生时间。
本文是《大话数据结构》的读书笔记,在输出关键路径时采用深度优先搜索输出关键路径,能输出多条关键路径。...
分类:
编程语言 时间:
2014-11-19 11:20:41
阅读次数:
260
图结构练习——判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
输入
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n
后面m行每行两个整数a b,表示从a到b有一...
分类:
编程语言 时间:
2014-11-19 01:26:26
阅读次数:
212
查错考场上又写挂的一道签到题。。。我们发现这题要求得到一个最小字典序列显然找到所有序列然后排序是不可取的,那么我们不能使用平常的拓扑排序方法,怎么搞使得在每次处理拓扑顺序的时候来维护呢?用小根堆维护入度为0的点即可,输入的时候统计入度{$inline on}const maxn=100010;typ...
分类:
其他好文 时间:
2014-11-02 09:17:18
阅读次数:
285
做拓扑排序的题目,首先要知道两条定理: 1、最后得到的拓扑数组的元素个数如果小于n,则不存在拓扑序列。 (有圈) 2、如果一次入队的入度为零的点数大于1,则拓扑序列不唯一。 (关系不确定) 本题有一个默认的东西,如果到了第K(看K#include#includeusing nam...
分类:
其他好文 时间:
2014-08-31 13:14:31
阅读次数:
271
拓扑排序
在实际应用中,有向图的边可以看做是顶点之间制约关系的描述。把顶点看作是一个个任务,则对于有向边表明任务Vj的完成需等到任务Vi完成之后,也就是说任务Vi先于任务Vj完成。对于一个有向图,找出一个顶点序列,且序列满足:若顶点Vi和Vj之间有一条边,则在此序列中顶点Vi必在顶点Vj之前。这样的一个序列就称为有向图的拓扑序列(topological order)。
步骤
从有向图中选取一个没有前驱(入度为0)的顶点输出。
删除图中所有以它为起点的弧。...
分类:
其他好文 时间:
2014-08-03 01:46:24
阅读次数:
492
Problem Description有N个比赛队(1#include#includeint indegree[505],map[505][505];//indegree记录每个节点的入度和。map记录那些边是相关联的int tp[505],k;//记录拓扑序列。void topsort(int n...
分类:
其他好文 时间:
2014-07-17 21:35:58
阅读次数:
219
给一个原串,以及那些字符是坏的,现在问你可以从原串中取出多少个不同子串,使得其所含的坏字符的个数不超过一个定数。这个题目网上有各种各样的解法。如hash,tire。我说一下我的解法。解法一:后缀自动机dp。f[][]保存到达某个状态,前面已经有的坏字符的个数的时候的字符串数量。这样按照拓扑序列一直递...
分类:
其他好文 时间:
2014-06-24 14:14:07
阅读次数:
169
#include#includeint d[15],map[15][15],vis[15];int main(){ int i,j,k,f,n,m,u,v; while(~scanf("%d%d",&n,&m)) { memset(d,0,sizeof(d)); memset(map,0,sizeo...
分类:
其他好文 时间:
2014-06-18 22:56:11
阅读次数:
252