哈理工 oj 2122 旅行(map + 最短路dij算法)

哈理工 oj 2122 旅行(map + 最短路dij算法)旅行TimeLimit:1000MSMemoryLimit:32768KTotalSubmit:18(6users)TotalAccepted:3(3users)Rating:SpecialJudge:NoDescription“04.24,和Sakur

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

旅行
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 18(6 users) Total Accepted: 3(3 users) Rating: 哈理工 oj 2122 旅行(map + 最短路dij算法)哈理工 oj 2122 旅行(map + 最短路dij算法)哈理工 oj 2122 旅行(map + 最短路dij算法)哈理工 oj 2122 旅行(map + 最短路dij算法) Special Judge: No
Description

04.24,和Sakura去东京天空树,世界上最暖和的地方天空树的顶上。”

04.26,和Sakura去明治神宫,有人在那里举办婚礼。”

04.25,和Sakura去迪士尼,鬼屋很可怕,但是有Sakura在,所以不可怕。”

Sakura最好了。”

                                    ——江南 《龙族》

 

绘梨衣和路明非今天要从迪士尼前往天空树,但他们的钱不多了,所以能省则省,他们现在有一个地图上面有n个景点和m条景点之间的路,每条路坐车都需要一定的钱数,现在他们求助于你,请你帮他们计算下从当前地点到目的地最少需要的钱数。

Input

有多组数据,每组数据第一行有两个数字2<=n<=300001<=m<=30000

接下来n行输入n个地名。

接下来m行每行有两个字符串(长度不超过20)和一个数字,代表两地之间的坐车的费用。

接下来一行输入两个字符串分别代表起点和终点。

Output

一个int数代表最少需要的钱数。

数据保证不会超过int型范围。

Sample Input
2 1
disney
TokyoSkyTree
disney TokyoSkyTree 1
disney TokyoSkyTree
Sample Output
1
Source

2014暑假集训练习赛(7月19日)

看到 理工题目上 这个题目做的人没几个  ,就看看是什么玩意儿~!~

#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<cctype>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
const int maxn=30003;
const int INF=0x1f1f1f1f;
int n,m;
//标记起始位置
string s;
string e;
map<string,int>cnt;//映射成节点编号

struct Edge
{
    int from,to,dist;
    Edge(int u,int v,int d):from(u),to(v),dist(d) {}
};
vector<Edge>edges;//存储边的结点信息
vector<int>G[maxn];//邻接表
bool done[maxn];   //标记是否访问过
int d[maxn];    //距离数组
struct heapnode //用于优先队列自定义
{
    int d,u;
    bool operator <(const heapnode rhs) const
    {
        return d > rhs.d;
    }
    heapnode(int dd,int uu):d(dd),u(uu) {}
};


void init()//初始化必不可少
{
    for(int i=0; i<n; i++)
        G[i].clear();
    edges.clear();
}

void addedge(int from,int to,int dist)
{
    edges.push_back(Edge(from,to,dist));
    int m = edges.size();
    G[from].push_back(m-1);
}

void dij( int s)
{
    priority_queue<heapnode>Q;
    for(int i=0; i<=n; i++)//初始化距离数组
        d[i]=INF;
    d[s]=0;
    memset(done ,0,sizeof(done));
    Q.push( heapnode(0,s) );
    while(!Q.empty())
    {
        heapnode x = Q.top();
        Q.pop();
        int u=x.u;
        if(u==cnt[e])
        {
            printf("%d\n",x.d);
            break;
        }
        if(done[u])continue;
        done[u] = true;
        for(int i=0; i<G[u].size(); i++)
        {
            Edge& e=edges[G[u][i]];//取出来一条邻接边
            if(d[e.to]>d[u]+e.dist)
            {
                d[e.to] = d[u] + e.dist;
                Q.push((heapnode(d[e.to],e.to)));
            }
        }
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        int t=1;
        int ans=0;
        string str;
        init();
        for(int i=0; i<n; i++)
        {
            cin>>str;
            cnt[str]=t++;
        }
        for(int i=0; i<m; i++)
        {
            string str2;
            int x;
            cin>>str>>str2>>x;
            addedge(cnt[str],cnt[str2],x);
            addedge(cnt[str2],cnt[str],x);
        }
        cin>>s>>e;
        dij(cnt[s]);
        s.clear();
        e.clear();
        cnt.clear();
    }
    return 0;
}
/*
2 1
a
v
a v 1
a v
3 2
a
b
c
a b 2
b c 3
a c
*/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184549.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 26款 网络会议/视频会议开源软件

    26款 网络会议/视频会议开源软件转自:http://www.oschina.net/project/tag/227/video-conferencing?lang=0&os=0&sort=view&p=1视频

    2022年6月30日
    32
  • noip宝藏_寻宝官方网

    noip宝藏_寻宝官方网看到这道题,我就想到了直接根据行走路径进行操作,结果——一片WA,悲伤,那么除了这样,怎么解决呢?我们用到的方法是用数组存储每层楼有向上楼梯的个数,以及每个房间的情况,然后将要走的次数模上总个数,再用得到的值加上最初的房间,即可。下面是代码:#include&lt;bits/stdc++.h&gt;usingnamespacestd;constintN=100…

    2022年8月22日
    7
  • SQL分页的三种方法[通俗易懂]

    SQL分页的三种方法[通俗易懂]三种SQL分页法  表中主键必须为标识列,[ID]intIDENTITY(1,1) 1.分页方案一:(利用NotIn和SELECTTOP分页)语句形式: SELECTTOP10*FROMTestTableWHERE(IDNOTIN     (SELECTTOP20id     FROMTestTable     ORDERBY

    2025年11月12日
    1
  • springcloud详细教程_史上最简单的画

    springcloud详细教程_史上最简单的画SpringCloudBus将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是,消息总线可以为微服务做监控,也可以作为应用程序之间相互通讯。本文要讲述的是用AMQP实现通知微服务架构的配置文件的更改。一、准备工作本文还是基于上一篇文章来实现。按照官方文档,我们只需要在配置文件中配置spring-cloud-starter-bus-amq

    2025年7月26日
    4
  • How to use SOAP API call SF

    How to use SOAP API call SF(1)DownloadWSDLfilesSetup→API→APIWSDLpage→GenerateEnterpriseWSDLThiswilltakeseveralminutestocreateapage.right-clickthepageandsaveaswsdl.jsp.xmlfileonyourlocallaptop.(2)DownloadSOAPUIOpenSourcefromDownl…

    2022年7月14日
    18
  • 关于AjaxPro用法[通俗易懂]

    关于AjaxPro用法[通俗易懂]特点是前后台传输数据特别方便,可以直接跟后台方法进行访问,中间用数据JASON数据传输这一切她都已经帮你做了。一、配置AjaxPro:1.下载AjaxPro.2.dll并添加到工程里,如图:在web.config中添加注册信息在后台Page_Load注册下,如下图:这样就配置好了。二、后台代码:[AjaxPro.AjaxMethod]加上此标记,前台可以直接调用此方法三、

    2022年7月12日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号