记录编号 259068 评测结果 AAAAAAAAAA
题目名称 KZ菌的星际旅行 最终得分 100
用户昵称 Gravatar哒哒哒哒哒! 是否通过 通过
代码语言 C++ 运行时间 0.163 s
提交时间 2016-05-08 07:13:28 内存使用 19.39 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<queue>
  7. #define maxn 1000001
  8. #define maxm 1000001
  9. using namespace std;
  10.  
  11. int read()
  12. {
  13. int x=0,f=1;char ch=getchar();
  14. while(ch<'0'||ch>'9'){
  15. if(ch=='-') f=-1;
  16. ch=getchar();
  17. }
  18. while(ch>='0'&&ch<='9'){
  19. x=x*10+ch-48;
  20. ch=getchar();
  21. }
  22. return x*f;
  23. }
  24. struct Edge{
  25. int next,to,dis;
  26. }e[maxm];
  27. int head[maxn],tot,dis[maxn];
  28. void edge(int u,int v,int w){
  29. e[++tot].to=v;
  30. e[tot].next=head[u];
  31. e[tot].dis=w;
  32. head[u]=tot;
  33. }
  34. struct Node{
  35. int num,dist;
  36. Node(int x,int y){num=x,dist=y;}
  37. bool operator < (const Node &x)const{
  38. return dist>x.dist;
  39. }
  40. };
  41. void dijkstra(int s){
  42. priority_queue<Node>q;
  43. memset(dis,127/3,sizeof(dis));
  44. dis[s]=0;q.push(Node(s,0));
  45. while(!q.empty()){
  46. Node node=q.top(); q.pop();
  47. s=node.num;
  48. if(dis[s]!=node.dist) continue;
  49. for(int i=head[s];i;i=e[i].next){
  50. int to=e[i].to;
  51. if(dis[to]>dis[s]+e[i].dis){
  52. dis[to]=dis[s]+e[i].dis;
  53. q.push(Node(to,dis[to]));
  54. }
  55. }
  56. }
  57. }
  58. int main()
  59. {
  60. freopen("KZstartravelillu.in","r",stdin);
  61. freopen("KZstartravelillu.out","w",stdout);
  62. int t=read(),m=read();
  63. for(int i=1;i<=m;i++){
  64. int a=read(),b=read(),c=read();
  65. edge(a,b,c);
  66. edge(b,a,c);
  67. }
  68. dijkstra(1);
  69. printf("%d",dis[t]*2);
  70. return 0;
  71. }
  72.