• 【POJ 3159】 Candies


    【题目链接】

              点击打开链接

    【算法】

             差分约束系统

    【代码】

              

    #include <algorithm>
    #include <bitset>
    #include <cctype>
    #include <cerrno>
    #include <clocale>
    #include <cmath>
    #include <complex>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <ctime>
    #include <deque>
    #include <exception>
    #include <fstream>
    #include <functional>
    #include <limits>
    #include <list>
    #include <map>
    #include <iomanip>
    #include <ios>
    #include <iosfwd>
    #include <iostream>
    #include <istream>
    #include <ostream>
    #include <queue>
    #include <set>
    #include <sstream>
    #include <stdexcept>
    #include <streambuf>
    #include <string>
    #include <utility>
    #include <vector>
    #include <cwchar>
    #include <cwctype>
    #include <stack>
    #include <limits.h>
    using namespace std;
    #define MAXN 30010
    #define MAXM 150010
    const int INF = 1e8;
    
    struct Edge
    {
            int to,w,nxt;
    } e[MAXM];
    int i,n,m,a,b,c,tot;
    int dis[MAXN],head[MAXN];
    
    inline void add(int u,int v,int w)
    {
            tot++;
            e[tot] = (Edge){v,w,head[u]};
            head[u] = tot;
    }
    inline int spfa()
    {
            int i,cur,v,w;
            stack<int> s;
            static bool instack[MAXN];
            static int cnt[MAXN];
            s.push(1);
            instack[1] = true;
            dis[1] = 0;        
            cnt[1] = 1;
            for (i = 2; i <= n; i++) dis[i] = INF; 
            while (!s.empty())
            {
                    cur = s.top();
                    s.pop();
                    instack[cur] = false;
                    for (i = head[cur]; i; i = e[i].nxt)
                    {
                            v = e[i].to;
                            w = e[i].w;
                            if (dis[cur] + w < dis[v])
                            {
                                    dis[v] = dis[cur] + w;
                                    if (!instack[v])
                                    {
                                            instack[v] = true;
                                            s.push(v);
                                            cnt[v]++;
                                            if (cnt[v] > n) return -1;
                                    }
                            }
                    }
            }
            return dis[n];
    }
    
    int main() 
    {
            
            scanf("%d%d",&n,&m);
            for (i = 1; i <= m; i++)
            {
                    scanf("%d%d%d",&a,&b,&c);
                    add(a,b,c);        
            }
            printf("%d
    ",spfa());
            
            return 0;
        
    }


  • 相关阅读:
    Python多线程Selenium跨浏览器测试
    Python Selenium设计模式-POM
    python webdriver安装
    webdriver介绍&与Selenium RC的比较
    sql server
    HTML5的一些新元素
    HTML5的一些新表单元素
    深入浅出:JavaScript作用域链
    简单的利用JS来判断页面是在手机端还是在PC端打开的方法
    浅谈移动端的自适应问题——响应式、rem/em、利用Js动态实现移动端自适应
  • 原文地址:https://www.cnblogs.com/evenbao/p/9196280.html
Copyright © 2020-2023  润新知