這個東西其實和vector差不多,但是確實比vector快,參考c++圖論vector鄰接表與鏈式前向星性能差異
邏輯是這樣的,有一個head,他標記了上一個邊是誰,最開始當然是-1嘍,每新add一條邊,當前邊的to更新爲到哪個點,next更新爲上一條邊的序號,head更新爲當前序號,這樣就實現了從後往前遍歷.
(據說可以實現從小到大排序,我似乎沒看到...)
https://blog.csdn.net/acdreamers/article/details/16902023講的很詳細的一片博客\
核心操作:
int head[maxn];
struct Edge
{
int to,next;//w(weight)
} edges[maxm]; //邊從0保存
int tot; //計數邊總數
/*
head 初始化-1,tot初始化0
*/
void add_edge(int from,int to)
{
edges[tot]=(Edge){to,head[from]};
head[from]=tot++;
in[to]++;
}
遍歷的時候:
for(int e = head[u];e!=-1;e = edges[e].next)
{
操作
}