今天刷到一个链式前向星的plus版,记个笔记
普通的链式前向星
struct EDGE {
int to,next,w;
} edge[30000];
void addedge(int u,int v,int w){
edge[cnt].to=v;
edge[cnt].next=head[u];
edge[cnt].w=w;
head[u]=cnt++;
}
for(int i=head[u];i!=-1;i=edge[i].next)
普通版本的前向星不支持删边操作,下面这个版本支持,但是要维护的东西更多,类似于双向链表实现栈
struct EDGE{
int fr, to, top, bot;
int w;
} edge[30000];
int cnt;
int head[20000];//可以理解为栈顶
void addedge(int u, int v, int w) {
edge[++cnt].fr = u;
edge[cnt].to = v;
edge[cnt].top = 0;
edge[cnt].w = w;
edge[head[u]].top = cnt;
edge[cnt].bot = head[u];
head[u] = cnt;
}
void delete_edge(int now) {
int up = edge[now].top, down = edge[now].bot;
if (up == 0) head[edge[now].fr] = down;
else edge[up].bot = down;
if (down > 0) edge[down].top = up;
}
for (int j = head[u]; j != -1; j = edge[j].bot)