DJ堆优化不成熟的小结
dj算法是一个非常重要的算法。特别是堆优化之后的DJ,其时间复杂度可达O(nlogn)(单源)。DJ算法的基本操作在此就不详细讲述了。主要讲一下DJ堆优化的几点注意事项。
1.dis数组的初始值
dj算法相当于是贪心的算法,每次取蓝白点相连的边权的最小值,所以初始值应该为 无穷大。
dis [ ] = INF;
2.priority_queue的设置
- STL的堆默认是大根堆,所以应该是
priority_queue <int,vector,greater > q;
而不是
priority_queue q;
如果边权不为1,可以使用pair,make_pair,前面存边权,后面存点的编号。
或结构体
bool opreator < ( node a ) const {
//此处只能接'<'
return u<a.u;//不变,'<'还是'<','>'还是'>';
return u>a.u;//相反
}
3.记得用vis标记走过的点
/*
O(eloge)堆优化dj算法,在n的数量级>=1e5时必须采用这种堆优化+邻接表方式
*/
struct node{
int p,