fork download
  1. #include<bits/stdc++.h>
  2.  
  3. #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  4. #define ll long long
  5. #define pii pair<int,int>
  6. #define pill pair<int,ll>
  7. #define pll pair<ll,ll>
  8. #define pb push_back
  9. #define fi first
  10. #define se second
  11. #define ff fi.fi
  12. #define fs fi.se
  13. #define sf se.fi
  14. #define ss se.se
  15. #define MASK(x) (((1)<<(x))-1)
  16. #define getbit(x,k) (((x)>>(k))&1)
  17.  
  18. using namespace std;
  19.  
  20. const int maxn=1e5+50,mod=1e9+7;
  21. const ll inf=0x3f3f3f3f3f3f3f3f;
  22. int n,m;
  23. vector<pll>eg[maxn],teg[maxn];
  24. ll d1[maxn],d2[maxn];
  25.  
  26. void dijkstra(vector<pll>e[], ll d[], int st)
  27. {
  28. memset(d,0x3f,(n+10)*sizeof(ll));
  29. priority_queue<pll,vector<pll>,greater<pll>>pQ;
  30. if(st!=-1)
  31. {
  32. d[st]=0;
  33. pQ.push({d[st],st});
  34. }
  35. else
  36. {
  37. for(int i=1;i<=n;i++) if(d1[i]!=inf)
  38. {
  39. d[i]=d1[i];
  40. pQ.push({d1[i],i});
  41. }
  42. }
  43. while(pQ.size())
  44. {
  45. pll u=pQ.top();pQ.pop();
  46. if(u.fi!=d[u.se]) continue;
  47. for(pll v:e[u.se]) if(u.fi+v.se<d[v.fi])
  48. {
  49. d[v.fi]=u.fi+v.se;
  50. pQ.push({d[v.fi],v.fi});
  51. }
  52. }
  53. }
  54. int main()
  55. {
  56. fastio
  57. cin>>n>>m;
  58. for(int i=1;i<=m;i++)
  59. {
  60. int u,v,c;cin>>u>>v>>c;
  61. eg[u].pb({v,c});
  62. teg[v].pb({u,c});
  63. }
  64. dijkstra(eg,d1,1);
  65. dijkstra(teg,d2,-1);
  66. for(int i=2;i<=n;i++)
  67. cout<<(d2[i]==inf?-1:d2[i])<<' ';
  68. }
  69. /*
  70. 7 6
  71. 1 2 1
  72. 1 3 1
  73. 2 4 1
  74. 3 4 1
  75. 4 5 1
  76. 6 7 1
  77. */
  78.  
Success #stdin #stdout 0.01s 8756KB
stdin
Standard input is empty
stdout
Standard output is empty