目录
1.最好永远不要用这种排序方式!!!!
struct pii {
int dis, i;
pii() {}
pii(int _dis, int _i) { dis = _dis, i = _i; }
} a[maxn];
struct cmp {
bool operator()(int x, int y) {
return a[x].dis > a[y].dis; //小顶堆
}
};
priority_queue<int, vector<int>, cmp> q;
P4779 【模板】单源最短路径(标准版)——这题这么写挂了。。。
即:用结构体下标对结构体进行排序。因为真的不知道会出现什么问题,试着用这个优化dijkstra,怎么调都不行——最后发现好像是因为它只有在加入新的元素的时候才会进行整体排序,并不能随时都保证s[i].dis小的在顶部。而且完全可以重载结构体的小于号进行排序啊!!!!!!!!!!!(不知道有无大佬指点一二,感激不尽)
正确示范(小顶堆):
struct pii {
int dis, i;
pii() {}
pii(int _dis, int _i) { dis = _dis, i = _i; }
} a[maxn];
struct cmp {
bool operator()(pii a, pii b) { return a.dis > b.dis; }
};
priority_queue<int, vector<int>, cmp> q;
等价于:
struct pii {
int dis, i;
pii() {}
pii(int _dis, int _i) { dis = _dis, i = _i; }
bool operator<(pii b) const { return dis > b.dis; }
} a[maxn];
priority_queue<int> q;