2018年长沙理工大学第十三届程序设计竞赛 E 小木乃伊到我家

时间:2019-03-14
本文章向大家介绍2018年长沙理工大学第十三届程序设计竞赛 E 小木乃伊到我家,主要包括2018年长沙理工大学第十三届程序设计竞赛 E 小木乃伊到我家使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目描述 

  AA的欧尼酱qwb是个考古学家,有一天qwb发现了只白白圆圆小小的木乃伊,它是个爱哭鬼却很努力。qwb想把这么可爱的小木乃伊送给
AA,于是便找上了快递姐姐,这下可让快递姐姐犯愁了,因为去往AA家的路实在太难走了(甚至有可能没有路能走到AA家),快递姐姐
找上聪明的ACMer,想请你帮忙找出最快到达AA家的路,你行吗?

输入描述:

第一行输入两个整数n和m(2<=n<=m<=200000),分别表示有n座城市和m条路,城市编号为1~n(快递姐姐所在城市为1,AA所在城市为n)。
接下来m行,每行输入3个整数u,v,w(u,v<=n,w<=100000),分别表示城市u和城市v之间有一条长为w的路。

输出描述:

输出结果占一行,输出快递姐姐到达AA家最短需要走多远的路,如果没有路能走到AA家,则输出“qwb baka”(不用输出双引号)。
示例1

输入

复制
4 4
1 2 1
2 3 2
3 4 3
2 3 1

输出

复制
5


 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <queue>
 8 using namespace std;
 9 typedef long long ll;
10 typedef pair<ll,ll> P;
11 const int N=2e5+9;
12 const ll inf=1e12+8;//注意范围
13 struct Node
14 {
15     ll to,w;
16     Node(){}
17     Node(ll TO,ll  W)
18     {
19         to=TO;
20         w=W;
21     }
22 };
23 ll dis[N];
24 vector<Node>vec[N];
25 void bfs()//数据量较大的单源最短路径。 
26 { 
27     priority_queue<P,vector<P>,greater<P> >que;//按pair的second排序 
28     ll x=0,y=1;
29     que.push(P(x,y));
30     dis[y]=x;
31     while(!que.empty())
32     {
33         P q=que.top();
34         que.pop();
35         ll v=q.second;
36         if(dis[v]<q.first) continue;//那么,走这条路的距离会大 
37         for(int i=0;i<vec[v].size();i++)
38         {
39             Node Nod=vec[v][i];
40             ll  t=Nod.to;
41             if(dis[t]>dis[v]+Nod.w)
42             {
43                 dis[t]=dis[v]+Nod.w;
44                 que.push(P(dis[t],t));    
45             }
46         }
47     }
48 }
49 int  main()
50 {
51     int n,m;
52     ll u,v,w;
53     scanf("%d%d",&n,&m);
54     for(int  i=0;i<m;i++)
55     {
56         scanf("%lld%lld%lld",&u,&v,&w);
57         vec[u].push_back(Node(v,w));
58         vec[v].push_back(Node(u,w));
59     }
60     for(int i = 1; i <= n; i ++) 
61         dis[i] = inf;
62     //memset(dis,inf,sizeof(dis));//memset会出现错误。
63     bfs();
64     if(dis[n]!=inf)
65     {
66         printf("%lld\n",dis[n]);
67     }
68     else{
69         printf("qwb baka\n");
70     }
71     return   0;
72 }