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=1e17+9;
  21. const ll inf=0x3f3f3f3f3f3f3f3f;
  22.  
  23. int n,m;
  24. vector<pii>eg[maxn];
  25. ll d1[maxn],dn[maxn];
  26. ll w1[maxn],wn[maxn];
  27.  
  28. void dijkstra(ll d[], ll w[], int st)
  29. {
  30. memset(d,0x3f,(n+10)*sizeof(ll));d[st]=0;
  31. priority_queue<pll,vector<pll>,greater<pll>>pQ;
  32. pQ.push({d[st],st});
  33. w[st]=1;
  34. while(pQ.size())
  35. {
  36. pll u=pQ.top();pQ.pop();
  37. if(u.fi!=d[u.se]) continue;
  38. for(pii v:eg[u.se])
  39. {
  40. if(u.fi+v.se<d[v.fi])
  41. {
  42. d[v.fi]=u.fi+v.se;
  43. w[v.fi]=w[u.se];
  44. pQ.push({d[v.fi],v.fi});
  45. }
  46. else if(u.fi+v.se==d[v.fi])
  47. w[v.fi]=(w[v.fi]+w[u.se])%mod;
  48. }
  49. }
  50. }
  51. ll nad(ll a, ll b)
  52. {
  53. ll rs=0;
  54. while(b)
  55. {
  56. if(b&1) rs=(rs+a)%mod;
  57. a=(a+a)%mod;
  58. b>>=1;
  59. }
  60. return rs;
  61. }
  62. int main()
  63. {
  64. cin>>n>>m;
  65. for(int i=1;i<=m;i++)
  66. {
  67. int u,v,c;cin>>u>>v>>c;
  68. eg[u].pb({v,c});eg[v].pb({u,c});
  69. }
  70. dijkstra(d1,w1,1);dijkstra(dn,wn,n);
  71. int ans=0;
  72. for(int u=1;u<=n;u++)
  73. for(pii v:eg[u])
  74. if(d1[u]+dn[v.fi]+v.se==d1[n])
  75. if(nad(w1[u],wn[v.fi])==w1[n])
  76. ans++;
  77. cout<<ans;
  78. }
  79.  
Success #stdin #stdout 0.01s 8192KB
stdin
Standard input is empty
stdout
Standard output is empty