当前位置:   article > 正文

2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-4 猛犸不上 Ban_2021 robocom 世界机器人开发者大赛-本科组(决赛)7-5超时

2021 robocom 世界机器人开发者大赛-本科组(决赛)7-5超时

输入样例:

  1. 5 6 1 5
  2. 1 2 1
  3. 2 3 2
  4. 3 4 3
  5. 4 1 5
  6. 3 5 4
  7. 4 5 1

输出样例:

在这里给出相应的输出。例如:

  1. 11 6
  2. Lose!

解题思路:对于第二种情况直接以s为起点跑一遍最短路即可,这里主要说一下第一种情况,因为dijkstra是不能跑有环的情况的,所以我们要转变一下,我们可以枚举每一个于s点直接相连的边,与s点直接相连的点为p,那么我们只要能得到从s点到p点的最短路(这个过程中不能经过我们当前这条与s直接相连的边)加上s到p点的距离就是s到s自身的一个回路的长度,这样我们对于所有直接相连的边进行枚举,取一个最小值即可。

上代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. const int N=510;
  7. const int M=1e5+10;
  8. int n,m,s,t;
  9. int dist[N],g[N][N];
  10. bool vis[N];
  11. void dijkstra(int s,int u,int v)
  12. {
  13. memset(dist,0x3f3f3f3f,sizeof dist);
  14. memset(vis,false,sizeof vis);
  15. dist[s]=0;
  16. for(int i=1;i<=n;i++)
  17. {
  18. int t=-1;
  19. for(int j=1;j<=n;j++)
  20. if(!vis[j]&&(t==-1||dist[t]>dist[j]))
  21. t=j;
  22. vis[t]=true;
  23. for(int j=1;j<=n;j++)
  24. {
  25. if(t==u&&j==v)
  26. continue;
  27. if(dist[j]>dist[t]+g[t][j])
  28. {
  29. dist[j]=dist[t]+g[t][j];
  30. }
  31. }
  32. }
  33. }
  34. int main()
  35. {
  36. cin>>n>>m>>s>>t;
  37. memset(g,0x3f3f3f3f,sizeof g);
  38. for(int i=1;i<=m;i++)
  39. {
  40. int u,v,val;
  41. cin>>u>>v>>val;
  42. g[u][v]=g[v][u]=min(g[u][v],val);
  43. }
  44. int ans1=0x3f3f3f3f;
  45. for(int i=1;i<=n;i++)
  46. {
  47. if(i==s||g[i][s]==0x3f3f3f3f)
  48. continue;
  49. dijkstra(s,s,i);
  50. ans1=min(ans1,dist[i]+g[i][s]);
  51. }
  52. dijkstra(s,0,0);
  53. if(ans1!=0x3f3f3f3f)
  54. cout<<ans1<<" ";
  55. else
  56. cout<<"-1 ";
  57. if(dist[t]!=0x3f3f3f3f)
  58. cout<<dist[t]<<endl;
  59. else
  60. cout<<"-1"<<endl;
  61. if(ans1<dist[t])
  62. cout<<"Win!"<<endl;
  63. else
  64. cout<<"Lose!"<<endl;
  65. return 0;
  66. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/910257
推荐阅读
相关标签
  

闽ICP备14008679号