摘要:
简单的LCA。。。dfs里fa的判断很重要呀。。。亲。。。 1 /* 2 LCA 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 #include<iostream> 9 #include<queue>10 #include<map>11 #include<math.h>12 using namespace std;13 typedef long long ll;14 阅读全文
摘要:
有向边!!! 1 #include<stdio.h> 2 #include<string> 3 #include<map> 4 #include<stdlib.h> 5 #include<iostream> 6 #include<algorithm> 7 #include<math.h> 8 using namespace std; 9 const int maxn = 200005; 10 struct node{ 11 int from,to,next,val; 12 }edge[ maxn<< 阅读全文
摘要:
最近总觉得什么都忘了,什么都忘了。。。只好一遍又一遍的复习复习再复习。。。拓扑排序:拓扑排序是一种有向无环图的排序表示,表示顶点的出现顺序。如果有环 则无法表示。算法的关键在于:每次取出一个度为0的顶点(若同时存在多个0度节点,则表示该拓扑排序不唯一),记为S。然后把和S相连的点的度都减1.......重复该过程 即可得到答案。(如果点的个数比较小 可以暴力的写 即两重FOR循环搞定;要么就是用队列,把度为0的点入队。。。)恩。。。好像就这些了。。。 阅读全文
摘要:
在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。直接根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。更好的方法是Kosaraju算法或Tarjan算法,两者的时间复杂度都是O(N+M)。本文介绍的是Tarjan算法。[Tarjan算 阅读全文