fork download
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <queue>
  4. #include <climits>
  5. using namespace std;
  6.  
  7. int main() {
  8.  
  9. long long n,m;
  10. cin>>n>>m;
  11.  
  12. unordered_map<long long,unordered_map<long long,long long> > Map;
  13. for(long long i=0;i<m;i++)
  14. {
  15. long long a,b,c;
  16. cin>>a>>b>>c;
  17. if(Map.count(a-1) > 0 && Map[a-1].count(b-1) > 0)
  18. {
  19. Map[a-1][b-1]=min(c,Map[a-1][b-1]);
  20. }
  21. else
  22. {
  23. Map[a-1][b-1]=c;
  24. }
  25. }
  26.  
  27. priority_queue<long long> PQ;
  28. PQ.push(0);
  29.  
  30. long long DP[n];
  31. for(long long i=0;i<n;i++)
  32. {
  33. DP[i] = LLONG_MAX;
  34. }
  35. DP[0]=0;
  36.  
  37. while(!PQ.empty())
  38. {
  39. long long x = PQ.top();
  40. PQ.pop();
  41.  
  42. for(auto it=Map[x].begin();it!=Map[x].end();it++)
  43. {
  44. if(DP[it->first] > DP[x] + it->second)
  45. {
  46. DP[it->first] = DP[x] + it->second;
  47. PQ.push(it->first);
  48. }
  49. }
  50. }
  51.  
  52. for(long long i=0;i<n;i++)
  53. {
  54. cout<<DP[i]<<" ";
  55. }
  56. cout<<endl;
  57. return 0;
  58. }
Success #stdin #stdout 0.01s 5284KB
stdin
10 20
8 5 1
9 10 2
7 9 8
9 8 8
10 9 9
7 8 10
8 9 2
7 10 10
4 5 8
5 6 1
4 2 1
5 3 6
10 7 3
3 5 2
5 4 7
1 2 9
2 3 2
6 7 5
3 4 10
3 2 10
stdout
0 9 11 20 13 14 19 29 27 29