关于dj87分和spfa100分的疑惑

P3627 [APIO2009] 抢掠计划

我也这样,很离谱,不知道为什么
by __int114514 @ 2023-07-06 15:49:03


@[BIOS](/user/833124) 这题求最长路,就是最短路负权反过来。
by XHY20180718 @ 2023-07-17 09:43:40


@[XHY20180718](/user/399475) 不是不用反过来也能求吗 求解
by DAMDAM @ 2023-07-26 10:57:40


@[DAMDAM](/user/759326) 那你应该用的top排序+dp把,就跟板子题一样。
by XHY20180718 @ 2023-07-26 10:58:52


@[XHY20180718](/user/399475) 我的理解就是用DJ堆来做 最长路就把比较方法从 ```cpp struct Node { int num, dis; inline bool operator <(const Node &a) const & { return this->dis > a.dis; } }; ``` 改为 ```cpp struct Node { int num, dis; inline bool operator <(const Node &a) const & { return this->dis < a.dis; } }; ``` 以及将Dijs里面的 ```cpp if (dis[v] > (d = w + edge[i].dis)) ``` 改为 ```cpp if (dis[v] < (d = w + edge[i].dis)) ``` 这样改不知道在哪里犯错,但是不需要用赋值为负权边求最长路 这样的话就如楼主所说的 87pts。
by DAMDAM @ 2023-07-26 11:37:14


@[DAMDAM](/user/759326) 这样跑最长路是有bug的,可以画个图: ![](https://cdn.luogu.com.cn/upload/image_hosting/398gu0me.png) 求1-3的最长路时,dij在做1的松弛操作时,不会将2那个节点加入优先队列,直接求出了最长路5,原因是他不会知道2-3这条边对最长路还会有影响。 (反正你记着dij不能求最常陆就对了,某人去年csp-s T1就用的dij最长路,然后...
by XHY20180718 @ 2023-07-26 12:00:39


@[XHY20180718](/user/399475) 感谢解疑!!!
by DAMDAM @ 2023-07-26 14:06:09


|