图论
文章平均质量分 55
DB_water
这个作者很懒,什么都没留下…
展开
-
最小生成树问题(Kruskal算法)
给定一个无向图,如果他的某个子图中的任意两个顶点都是连同的并且是一棵树,那么这棵树就叫生成树(Spanning Tree),如果边上有权值,那么使得边权和最小的生成树叫做最小生成树.首先我们假设有一棵树只包含一个顶点v的树T.然后贪心的取T和其他定点之间连接的最小权值的边,并把它加入到T中.不断进行这个操作,既可以得到一颗生成树了#include#includeusing name原创 2015-05-04 15:12:25 · 759 阅读 · 0 评论 -
poj2186
题意:给出一个有向图,求一共有多少个点,满足这样的条件,所有其它的点都可以到达这个点。分析:强连通分支+缩点,然后统计每个强连通分支的出度,如果只有一个为0,则输出其内部点的个数,如果有多个为0,说明没有答案。就是最基本的强连通模板而已#include#include#include#includeusing namespace std;const int MAX_N=500原创 2015-06-07 20:47:14 · 383 阅读 · 0 评论 -
强连通分量分解
强连通分量分解可以通过两次简单的DFS实现.第一次DFS时,选取任意顶点作为起点,遍历所有未访问的顶点,并在回溯时给顶点标号,对于剩余未访问的顶点不断重复上过程.完成标号后,越接近图的尾部的,顶点标号越小,第二次DFS时,先将所有的边反向,然后以标号最大的顶点为起点进行DFS.这样DFS所遍历的顶点集合就构成了一个强连通分量,之后只要还有尚未访问的顶点,就从中选取标号最大的顶点不断重复上面过程原创 2015-06-07 20:35:29 · 1155 阅读 · 0 评论 -
2-SAT问题
2-SAT问题利用强连通分量分解,可以在布尔公式句数的线段时间内解决2-SAT问题,首先利用=>(蕴含)将每个子句(AvB)改写为等价形式(非A=>B)^(A=>非 B)这样对每个布尔变量x构造两个顶点分别代表X和非x,以=>关系为边建立有向图,此时,如果图上的a点能够达到b点的话,就表示a为真时b一定为真.因此,该图中同一个强连通分量所含的所有文字的布尔值均相同.如果存在非x和x在同原创 2015-06-07 20:38:11 · 560 阅读 · 0 评论