警示后人

P1462 通往奥格瑞玛的道路

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吧?


|