Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n,e;
  4. typedef pair<int, int> pi;
  5. typedef pair<pi, int> ppi;
  6. vector<pi> adjlist[100050];
  7. int dist[100050];
  8. int ways[100050];
  9. priority_queue<pi, vector<pi>, greater<pi>> pq;
  10. int main() {
  11.     scanf("%d %d", &n, &e);
  12.     for(int i = 0; i<e; i++){
  13.       int a,b,c;
  14.       scanf("%d %d %d", &a, &b, &c);
  15.       adjlist[a].push_back(pi(b,c));
  16.     }
  17.     memset(dist, -1, sizeof dist);
  18.     pq.push(pi(0, 0));
  19.     dist[0] = 0;
  20.     ways[0] = 1;
  21.     while(!pq.empty()){
  22.       int d = pq.top().first; int node = pq.top().second;
  23.       pq.pop();
  24.       if(ways[node] == 0) continue;
  25.       if(d != dist[node]) continue;
  26.       for(auto i : adjlist[node]){
  27.         int childnode = i.first; int edgeweight = i.second;
  28.         if(ways[childnode] == 0){
  29.           dist[childnode] = edgeweight+d;
  30.           ways[childnode] = ways[node]%1000000007;
  31.           pq.push(pi(dist[childnode], childnode));
  32.         }else{
  33.           if(dist[childnode] == edgeweight+d){
  34.             ways[childnode]=(ways[childnode]%1000000007 + ways[node]%1000000007)%1000000007;
  35.           // pq.push(pi(dist[childnode], childnode));
  36.           }else if(dist[childnode] > edgeweight+d){
  37.             ways[childnode] = ways[node]%1000000007;
  38.             dist[childnode] = edgeweight+d;
  39.           pq.push(pi(dist[childnode], childnode));
  40.           }
  41.         }
  42.       }
  43.     }
  44.     printf("%d", ways[n-1]%1000000007);
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement