邻接表-数组的实现
前些天做了一道poj3321,这道题是一个dfs序+树状数组/线段树,看了许久没有看懂,没有看懂的地方不是dfs序或者线段树/树状数组,而是邻接表建树(数组),总结了一下方法流程。
先任意给几条边用作例子:
4 5 //四条边,五个点
1 4 //点1,4中有一条边
4 3
1 2
2 4
1.定义两个数组first和next;first[i]表示以i号顶点作为起始顶点的第first[i]条边,next[i]表示第i条边的前一条边是第next[i]条,很难理解吧,我们直接看数据;
2.读入第1条边1,4,这时第1条边的起始顶点为1,所以将first[1]=1(第1条边以1号顶点为起始顶点);而编号为1的边是我们发现的以顶点1为起始顶点的第一条边,所以next[1]=-1(没有上一条边);
3.读入第2条边4,3,这时第2条边的起始顶点为4,那么将first[4]=2(第2条边以4号顶点为起始顶点);此时编号为2的边是我们发现的以顶点4为起始顶点的第一条边,所以next[2]=-1(没有上一条边);