题意是给出一个有向图 给出一定的边 可以求出边权 求单源最短路 如果<3 或者 达不到 输出问号 不然输出dis[v]
一开始耿直的写了一个dij交上去 还过了样例 然后wa掉 看了看题 发现其中有负权边 并且应该是可以达到负环的 比如3->1->2->3 所以<3是判断 这个点能否是负的 或者 它的确小于3
如果一个点在负环中 那么dis[it]可以是无限小 那么它所能到达的所有点 都可以是无限小
使用spfa判断 当一个点被证实是在负环中 dfs它 把它与它能到达的所有的点标记
需要注意的是 松弛的时候判断松弛边的起点有没有被标记 如果它被标记过 说明 它能松弛的那个点一定也被标记过了 那么就跳过这个边就可以了
#include #include #include #include