Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n,e;
- typedef pair<int, int> pi;
- typedef pair<pi, int> ppi;
- vector<pi> adjlist[100050];
- int dist[100050];
- int ways[100050];
- priority_queue<pi, vector<pi>, greater<pi>> pq;
- int main() {
- scanf("%d %d", &n, &e);
- for(int i = 0; i<e; i++){
- int a,b,c;
- scanf("%d %d %d", &a, &b, &c);
- adjlist[a].push_back(pi(b,c));
- }
- memset(dist, -1, sizeof dist);
- pq.push(pi(0, 0));
- dist[0] = 0;
- ways[0] = 1;
- while(!pq.empty()){
- int d = pq.top().first; int node = pq.top().second;
- pq.pop();
- if(ways[node] == 0) continue;
- if(d != dist[node]) continue;
- for(auto i : adjlist[node]){
- int childnode = i.first; int edgeweight = i.second;
- if(ways[childnode] == 0){
- dist[childnode] = edgeweight+d;
- ways[childnode] = ways[node]%1000000007;
- pq.push(pi(dist[childnode], childnode));
- }else{
- if(dist[childnode] == edgeweight+d){
- ways[childnode]=(ways[childnode]%1000000007 + ways[node]%1000000007)%1000000007;
- // pq.push(pi(dist[childnode], childnode));
- }else if(dist[childnode] > edgeweight+d){
- ways[childnode] = ways[node]%1000000007;
- dist[childnode] = edgeweight+d;
- pq.push(pi(dist[childnode], childnode));
- }
- }
- }
- }
- printf("%d", ways[n-1]%1000000007);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement