 Hackerrank Question

Please let me know what is wrong in this code.

Your Implementation of was absolutely correct but the reason for some failing cases was the following block of code:

``````  node x = nodes[nn.dest].get(i);
if(dist[nn.dest]+x.dist< dist[x.dest] )
{
dist[x.dest] = dist[nn.dest]+x.dist;
if((dist[nn.dest])/k%2==1){
long r = (dist[nn.dest]%k);
dist[x.dest] += k-r;
}
node xx = new node();
xx.dest=x.dest;
xx.dist=dist[x.dest];
}
``````

You are adding the extra waiting time only after you have considered that the current path is shorter than the path , What I mean to say is that you are not adding the extra waiting time before putting elements in your queue.

Let us consider an example , suppose you reach a node at time t = 4 and the weight of the edge that you will be traversing is just 1 unit. Now suppose that the traffic light is red at t = 4 when you reached the node , but since you do not consider the extra waiting time during the `if(dist[nn.dest]+x.dist< dist[x.dest] )` statement , your code fails on some cases

I modified your code , check it.
I just did the following modification to your code:

``````         long tempp = 0;
if((dist[nn.dest])/k%2==1){
long r = (dist[nn.dest]%k);
tempp += k-r;
}
if(dist[nn.dest]+x.dist + tempp < dist[x.dest] )
{
dist[x.dest] = dist[nn.dest]+x.dist + tempp;

node xx = new node();
xx.dest=x.dest;
xx.dist=dist[x.dest];