zoukankan      html  css  js  c++  java
  • UVA 10801 Lift Hopping 最短路

    2种方式直接代码就可以了。注意首次不需要60S的转换

    #include <map>
    #include <set>
    #include <list>
    #include <cmath>
    #include <ctime>
    #include <deque>
    #include <stack>
    #include <queue>
    #include <cctype>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <climits>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define LL long long
    #define PI 3.1415926535897932626
    using namespace std;
    int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
    #define MAXN 105
    const int INF = 0x3f3f3f3f;
    int T[10],N,K;
    int w[MAXN][MAXN],d[MAXN];
    int src[MAXN];
    typedef pair<int,int> pii;
    priority_queue<pii,vector<pii>,greater<pii> > q;
    void read()
    {
        memset(w,0x3f,sizeof(w));
        for (int i = 0; i < N; i++) scanf("%d",&T[i]);
        for (int i = 0; i < N; i++)
        {
            int cas = 0;
            char ch;
            do
            {
                scanf("%d",&src[cas++]);
                ch = getchar();
            }while (ch != '
    ');
            for (int j = 0; j < cas; j++)
                for (int k = j; k < cas; k++)
                  {
                      w[src[j]][src[k]] = min(w[src[j]][src[k]],abs(src[k] - src[j]) * T[i]);
                      w[src[k]][src[j]] = min(w[src[k]][src[j]],abs(src[k] - src[j]) * T[i]);
                  }
        }
    }
    void SPFA()
    {
        bool inq[MAXN];
        memset(inq,false,sizeof(inq));
        memset(d,0x3f,sizeof(d));
        d[0] = 0;
        queue<int>que;
        while (!que.empty()) que.pop();
        que.push(0);
        while (!que.empty())
        {
            int u = que.front();que.pop();
            inq[u] = false;
            for (int i = 0; i < MAXN; i++)
            {
                if (u == 0)
                {
                    if (d[i] > d[u] + w[u][i])
                    {
                        d[i] = d[u] + w[u][i];
                        if (!inq[i])
                        {
                            inq[i] = true;
                            que.push(i);
                        }
                    }
                }
                else
                {
                    if (d[i] > d[u] + w[u][i] + 60)
                    {
                        d[i] = d[u] + w[u][i] + 60;
                        if (!inq[i])
                        {
                            inq[i] = true;
                            que.push(i);
                        }
                    }
                }
            }
        }
    }
    void dijkstra()
    {
        memset(d,0x3f,sizeof(d));
        d[0] = 0;
        q.push(make_pair(d[0],0));
        while (!q.empty())
        {
            pii t = q.top();q.pop();
            int u = t.second;
            if (t.first != d[u]) continue;
            for (int v = 0; v < MAXN; v++)
            {
                if (u == 0)
                {
                    if (d[v] > d[u] + w[u][v])
                    {
                        d[v] = d[u] + w[u][v];
                        q.push(make_pair(d[v],v));
                    }
                }
                else
                {
                    if (d[v] > d[u] + w[u][v] + 60)
                    {
                        d[v] = d[u] + w[u][v] + 60;
                        q.push(make_pair(d[v],v));
                    }
                }
            }
        }
    }
    int main()
    {
        //freopen("sample.txt","r",stdin);
        while (scanf("%d%d",&N,&K) != EOF)
        {
            read();
            SPFA();
            //dijkstra();
            if (d[K] == INF) puts("IMPOSSIBLE");
            else printf("%d
    ",d[K]);
        }
        return 0;
    }
  • 相关阅读:
    Winform学习笔记
    ASP.NET后台注册javascript脚本方法
    使用MultipleActiveResultSets复用Sql Server 2008数据库连接
    angular 2 新建组件命令
    一个关于日志操作方法
    vs2017 打开包管理器 (程序包管理控制台)
    Asp.Net Core Identity 怎么获取当前登录的用户信息?
    abp 实现所有审计的接口
    IIS8.5 布署 Asp.Net Core 老是报500的错误怎么办?
    .NET Core 1.1布署后出现“HTTP Error 502.5 Process Failure”的解决办法
  • 原文地址:https://www.cnblogs.com/Commence/p/4008387.html
Copyright © 2011-2022 走看看