来源:JK老班
克里斯卡尔:开始时,顶点集包含原图所有的点,边集E是空的。
- 先把边从小到大排序。
- 从小到大依次选边加入边集E,加入的边要保证树不会形成圈,即(x, y)∈E,当T+(x, y)不会形成圈,就选这条边(把边加入最小生成树(子图)中)。如果会形成圈,不选。
是否形成圈?
x、y是否在同一个连通分支,是,会形成圈。
原来的做法:跑1次DFS,看x能不能到y,能到,是一个连通分支。
查x在哪个连通分支,查y在哪个连通分支,如果x、y不在同一个连通分支,合并。即,如果选了(x , y),有2个连通分支(x所在连通分支,y所在连通分支)要合并。