Lucky_dpy @ 2023-08-17 21:02:03
dijkstra初始化d值不要为0x3f3f3f,要再赋值大一点,不然会50wa(调了两个小时)
正确初始化(参考)
memset(d,127,sizeof(d));
memset(vis,0,sizeof(vis));
by CodeArhat @ 2023-08-19 13:13:51
可能还有别的原因,我用0x3f
初始化能过。
memset(dist, 0x3f, sizeof(dist));
memset(done, 0, sizeof(done));
struct Path {
int u;
ll d; // 用int就WA了两个点
bool operator<(const Path& t) const { return d > t.d; }
};
by Lucky_dpy @ 2023-08-21 19:12:33
@CodeArhat 我又去试了几次,发现是用for循环赋值0x3f3f3f会wa,赋值1e9就能ac,memset赋值不会wa
50wa赋值:
for(i=0;i<=n;i++){
d[i]=0x3f3f3f;
vis[i]=0;
}
100ac赋值:
for(i=0;i<=n;i++){
d[i]=1e9;
vis[i]=0;
}
不太理解(太蒟蒻了)
by Lucky_dpy @ 2023-08-21 19:22:18
@CodeArhat 我悟了,我刚写了个程序实验了一下,如果直接赋值a=0x3f3f3f,a只能赋值成4144959,memset赋值才能赋值成1061109567
by SCAR_L @ 2023-08-28 12:54:07
@Lucky_dpy 因为memset是对于每个字节赋值0x3f的,你要手动的话就得赋值成0x3f3f3f3f吧?