我也这样,很离谱,不知道为什么
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