fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct edge{
  5. int connect;
  6. int price;
  7.  
  8. };
  9.  
  10. int dijsktra(vector<edge> al[], int source, int target, int c){
  11. vector<int> min_dis(c+1, INT_MAX);
  12. min_dis[source] = 0;
  13.  
  14. set< pair<int, int> > active_vertices;
  15. active_vertices.insert(make_pair(0, source));
  16.  
  17. while(!active_vertices.empty()){
  18. int where = active_vertices.begin()->second;
  19. if(where==target){
  20. return min_dis[where];
  21. }
  22. active_vertices.erase(active_vertices.begin());
  23. for(int i=0; i<al[where].size(); i++){
  24. if(min_dis[al[where][i].connect] > min_dis[where]+al[where][i].price){
  25. active_vertices.erase({min_dis[al[where][i].connect], al[where][i].connect});
  26. min_dis[al[where][i].connect] = min_dis[where]+al[where][i].price;
  27. active_vertices.insert(make_pair(min_dis[al[where][i].connect], al[where][i].connect));
  28. }
  29. }
  30. }
  31. return -1;
  32. }
  33.  
  34. int main(){
  35. int c, f;
  36. cin >> c >> f;
  37. vector<edge> al[c+1];
  38. for(int i=0; i<f; i++){
  39. int x;
  40. edge t;
  41. cin >> x >> t.connect >> t.price;
  42. al[x].push_back(t);
  43. }
  44. vector<int> cheap;
  45. for(int i=1; i<=c; i++){
  46. for(int j=1; j<=c; j++){
  47. if(i!=j)
  48. cheap.push_back(dijsktra(al, i, j, c));
  49. }
  50. }
  51. cout << *max_element(cheap.begin(), cheap.end());
  52. }
  53.  
Success #stdin #stdout 0s 3476KB
stdin
4 5
1 2 10
1 3 24
2 3 2
2 4 15
3 4 7
stdout
19