标签:size 欧拉路 family 注意 操作 距离 优化 细节 更新
图论:
一.最短路:
1.spfa算法中的vis数组记录的是有没有入队,防止多次入队,通过松弛操作来达到最优解
2.dijkstra算法的vis是记录是否出队,也就是说根据贪心的过程,我们在优先队列里可能会多次放一个点
但是我们只需要用距离最小的点来更新,其他入队的相同点不能更新来保证时间复杂度
3.对于一些特殊的题需要求到某个点的第d小路径,我们只能用dijkstra+堆来维护
因为我们对于$x->to$的更新必须保证x已经更新为最优解,然后注意vis数组需要用
对于每个点用堆储存他的d+1小值,更新完后的堆首就是答案
二.欧拉路
1.判定细节:对于欧拉路,有向图中出度-入度==1\-1的点各有一个,其余入度==出度
无向图中度数为奇的点有两个,其余为偶
对于欧拉回路,有向图所有点入度==出度
无向图度数均为偶
2.实现:可以用手工栈+当前弧优化,
st[++top]=qidian; while(top>0){ int x=st[top];int i=head[x]; while(i&&vis[i])i=e[i].n; if(i){ ++top; int to=e[i].to;stb[top]=id[i];vis[i]=1; if(T==1){vis[i^1]=1;} head[x]=e[i].n; st[top]=to; } else{ ans[++ans[0]]=stb[top]; top--; } }
标签:size 欧拉路 family 注意 操作 距离 优化 细节 更新
原文地址:https://www.cnblogs.com/Wwb123/p/11799410.html