我知道自己的写法不是标准写法.....但是想知道这样写为什么不行
inline void jk()
{
memset(dis, 0x3f, sizeof(dis));
priority_queue<node>q;
dis[s] = 0; flag[s] = 1;
q.push((node){s});
while (!q.empty())
{
int u = q.top().num;
q.pop();
for (register int e = hd[u]; e; e = fm[e])
{
int v = to[e];
int w = vl[e];
if (dis[v] > dis[u] + w)
{
dis[v] = dis[u] + w;
if (!flag[v])
{
q.push((node){v});
flag[v] = 1;
}
}
}
}
}
和标准写法的区别就在于入队。
inline void jk() {
memset(d, 0x3f, sizeof(d));
d[s] = 0;
q.push((node){0, s});
while (!q.empty()) {
int u = q.top().pos;
q.pop();
if (flag[u]) continue;
flag[u] = 1;
for (register int e = hd[u]; e; e = fm[e]) {
int v = to[e];
int w = vl[e];
if (d[v] > d[u] + w) {
d[v] = d[u] + w;
if(!flag[v])
q.push((node){d[v], v});
}
}
}
}