G.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # include <iostream>
  2. # include <cstdio>
  3. # include <cstring>
  4. # include <algorithm>
  5. # include <cmath>
  6. using namespace std;
  7. #define INF 0x3f3f3f3f
  8. #define Max 1001
  9. int cost[Max][Max];
  10. int d[Max];
  11. bool used[Max];
  12. void dijkstra(int n,int s)
  13. {
  14. memset(d,INF,sizeof(d));
  15. memset(used,false,sizeof(used));
  16. d[s]=0;
  17. while(true)
  18. {
  19. int v=-1;
  20. for(int u=0;u<n;u++)
  21. if(!used[u]&&(v==-1||d[u]<d[v]))
  22. v=u;
  23. if(v==-1)
  24. break;
  25. used[v]=true;
  26. for(int u=0;u<n;u++)
  27. {
  28. d[u]=min(d[u],d[v]+cost[u][v]);
  29. }
  30. }
  31. }
  32. int main()
  33. {
  34. int T,m,n,k,i,j;
  35. int from,to,Cost,f,t;
  36. //freopen("in.txt","r",stdin);
  37. cin>>T;
  38. while(T--)
  39. {
  40. memset(cost,INF,sizeof(cost));
  41. cin>>n>>m;
  42. for(i=0;i<m;i++)
  43. {
  44. cin>>from>>to>>Cost;
  45. cost[from][to]=cost[to][from]=Cost;
  46. }
  47. cin>>f>>t;
  48. dijkstra(n,f);
  49. int Time[Max],tim=0;
  50. memset(Time,0,sizeof(Time));
  51. for(i=0;i<n;i++)
  52. Time[i]=d[i];
  53. dijkstra(n,t);
  54. for(i=0;i<n;i++)
  55. {
  56. Time[i]+=d[i];
  57. tim=max(tim,Time[i]);
  58. }
  59. cout<<tim<<endl;
  60. }
  61. }