【C++ 图论】虫洞Wormholes


题意简介

因为要回到过去,所以回到起点时是一个负数。所以,就是求负环的问题了。

输入浅析

输入,就是说,有很多无向边,还有一些虫洞在单向边上,这些单向边为负权。

算法分析

算法的话,判负环有3 kinds of algorithm : SPFA, Bellman-Ford and Floyd。看这道题的神奇数据范围,三种是都可以用的。

等一下,不是多源负环吗?怎么能用SPFA呢?不要急,等一下再说。

Floyd

老师:在循环体足够简单的情况下, O ( 50 0 3 ) O(500^3) O(5003)是可以过的…… 看来老师很擅长卡常+O2啊

因为代码极简单,直接看吧。

还有,记住,有重边……

// luogu-judger-enable-o2
#include<cstdio>
#include<cstring>
#define reg register
#define ONLINE_JUDGE
#ifdef ONLINE_JUDGE
char buf[1 << 21], *p1 = buf, *p2 = buf;
inline int getc() {
   
    return p1 == p2 && (++p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
#define getchar getc
#endif
template <typename T>
inline T read() {
   
    T a = 0; char c = getchar(), f = 1;
    while(c < '0' || c > '9') {
   
        if(c == '-') f = -f;
        if(c == -1) return c;
        c = getchar();
    }
    while(c >= '0' && c <= '9') a = (a << 1) + (a << 3) + (c ^ 48), c = getchar();
    return a * f;
}
template <class T>
inline T Min(T a, T b) {
    return a 
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值