2018年长沙理工大学第十三届程序设计竞赛 E小木乃伊到我家(spfa模版)
链接:https://www.nowcoder.com/acm/contest/96/E
来源:牛客网
小木乃伊到我家
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
AA的欧尼酱qwb是个考古学家,有一天qwb发现了只白白圆圆小小的木乃伊,它是个爱哭鬼却很努力。qwb想把这么可爱的小木乃伊送给
AA,于是便找上了快递姐姐,这下可让快递姐姐犯愁了,因为去往AA家的路实在太难走了(甚至有可能没有路能走到AA家),快递姐姐
找上聪明的ACMer,想请你帮忙找出最快到达AA家的路,你行吗?
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<cstdio> 2 #include<string.h> 3 #include<algorithm> 4 #include<queue> 5 using namespace std; 6 #define ll long long 7 const int maxn=200005; 8 ll head[maxn*2],d[maxn],tol=0,n,m; 9 bool is[maxn]; 10 queue<long long>P; 11 struct node 12 { 13 ll to,next,cost; 14 }rode[maxn*2]; 15 void add(ll a,ll b,ll c) 16 { 17 rode[tol].to=b; 18 rode[tol].cost=c; 19 rode[tol].next=head[a]; 20 head[a]=tol++; 21 } 22 void spfa() 23 { 24 for(int i=0;i<maxn;i++)d[i]=1e18; 25 d[1]=0;is[1]=1;P.push(1); 26 while(!P.empty()) 27 { 28 ll v=P.front();P.pop(); 29 is[v]=0; 30 for(ll i=head[v];i!=-1;i=rode[i].next) 31 { 32 node e=rode[i]; 33 if(d[e.to]>d[v]+e.cost) 34 { 35 d[e.to]=d[v]+e.cost; 36 if(!is[e.to]) 37 { 38 is[e.to]=1; 39 P.push(e.to); 40 } 41 } 42 } 43 } 44 } 45 int main() 46 { 47 scanf("%lld%lld",&n,&m); 48 memset(head,-1,sizeof(head)); 49 for(int i=0;i<m;i++) 50 { 51 ll x,y,z;scanf("%lld%lld%lld",&x,&y,&z); 52 add(x,y,z); 53 add(y,x,z); 54 } 55 spfa(); 56 if(d[n]<1e18/2)printf("%lld\n",d[n]); 57 else printf("qwb baka\n"); 58 return 0; 59 }