之前一直没写,每次又都忘,记录一下吧
// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点
int h[N], e[M], ne[M], idx;//这里的e[]存储所有的边
//这里e[]里面的大小应该是边数
// 添加一条边a->b
void add(int a, int b)
{
// 比如这里是2->1->-1中间插入3变成2->1->3->-1 ,这里a就是2,b就是3
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
/*
e[idx] = b也就是这个空间先存入b(3)
然后ne[idx]它的下一个指针也就变成了之前指向1的指针h[a(2)]
然后h[a(2)]再指向3!
*/
}
// 初始化
idx = 0;
memset(h, -1, sizeof h);
//这里的h[]是每个点的头节点
//e[i]是每个节点的值是多少,也存的是我们所有的边
//ne[]表示节点i的next指针是多少
//idx存储我们要用的下一个地址