基本上任何情况都可以使用这种方法存
N = 1e5 的时候就一定要这么存了
N = 1e3 左右可以偷懒一下 使用邻接矩阵来存、

模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const int N = 1e5 + 10;
int h[N]; //存储表头
int e[N], ne[N], idx; //邻接表的基本参值

//将b插入a后
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx, idx++;
}


//然后要注意初始化和遍历的问题
/**
总的来说就是把 头节点 h[] 全部初始化为-1 用什么方法都行
C++的话 用memset会快一些 其他语言直接遍历一遍就行了
*/
memset(h,-1,sizeof h);
/**
遍历
*/
// u 为初始遍历的点
for(int i=h[u] ; i!=-1 ;i = ne[i]){
// 取出链表中存在的值 通常为节点值
int j = e[i];
/**
然后这下面根据题意进行相关操作
*/
}