PracHub
QuestionsLearningGuidesInterview Prep

Quick Overview

Find a route through a directed road network that minimizes travel against the original edge directions. Model forward and reverse traversal costs correctly, handle parallel edges and disconnected nodes, and choose a shortest-path approach that scales to hundreds of thousands of vertices and edges.

  • medium
  • Google
  • Coding & Algorithms
  • Software Engineer

Minimize Direction Violations in a Directed Road Network

Company: Google

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Onsite

# Minimize Direction Violations in a Directed Road Network There are `n` nodes numbered from `0` through `n - 1`. Every input edge `[u, v]` has an original direction from `u` to `v`, but you may physically traverse it in either direction. - Traversing an edge in its original direction costs `0`. - Traversing it against its original direction costs `1`. Given `start` and `end`, return the minimum total cost of any route from `start` to `end`. Return `-1` if the two nodes are disconnected even when edges may be traversed both ways. ## Function Signature ```python def minimum_direction_violations( n: int, edges: list[list[int]], start: int, end: int, ) -> int: ... ``` ## Constraints - `1 <= n <= 200_000` - `0 <= len(edges) <= 300_000` - `0 <= u, v < n` and `u != v` - Multiple directed edges between the same pair of nodes are allowed. - `0 <= start, end < n` ## Examples ```text Input: n = 5, edges = [[0, 1], [2, 1], [2, 3], [4, 3]], start = 0, end = 4 Output: 2 ``` ```text Input: n = 4, edges = [[0, 1], [1, 2]], start = 0, end = 3 Output: -1 ``` ```text Input: n = 3, edges = [[0, 1], [1, 2]], start = 2, end = 0 Output: 2 ```

Quick Answer: Find a route through a directed road network that minimizes travel against the original edge directions. Model forward and reverse traversal costs correctly, handle parallel edges and disconnected nodes, and choose a shortest-path approach that scales to hundreds of thousands of vertices and edges.

There are `n` intersections numbered `0` through `n - 1`, joined by one-way roads. Each road is given as `edges[i] = [u, v]`, meaning the road's signposted direction runs from `u` to `v`. You may still physically drive any road in either direction: - driving a road in its signposted direction costs `0`; - driving a road against its signposted direction costs `1` (one *direction violation*). Given `start` and `end`, return the **minimum total number of direction violations** on any route from `start` to `end`. Return `-1` when no route exists at all, even though every road may be driven both ways. ### Details - Reachability is decided by the *undirected* version of the graph, because every road is drivable both ways. Only the cost depends on orientation. - The edge list may contain parallel duplicates (`[u, v]` listed twice) and anti-parallel pairs (both `[u, v]` and `[v, u]`). Every listed road is independently usable. - If `start == end`, the answer is `0`. ### Output semantics Return a single integer: the minimum violation count, or `-1` when `end` is unreachable from `start`. Because the return value is one scalar, the answer is unique even when several different routes achieve it, so there is no ordering or tie-breaking to define. Every quantity fits in a signed 32-bit integer (the answer never exceeds `edges.length`), so `int` is the correct type in Java and C++; no `long` / `long long` is required. ### Example 1 ```text Input: n = 5, edges = [[0, 1], [2, 1], [2, 3], [4, 3]], start = 0, end = 4 Output: 2 ``` The route `0 -> 1 -> 2 -> 3 -> 4` costs `0 + 1 + 0 + 1 = 2`. Hops `1 -> 2` and `3 -> 4` run against the signposted directions of `[2, 1]` and `[4, 3]`. ### Example 2 ```text Input: n = 4, edges = [[0, 1], [1, 2]], start = 0, end = 3 Output: -1 ``` Node `3` touches no road, so it is unreachable in both the directed and the undirected reading of the network. ### Example 3 ```text Input: n = 3, edges = [[0, 1], [1, 2]], start = 2, end = 0 Output: 2 ``` Travelling `2 -> 1 -> 0` runs against both signposts, so each of the two roads costs `1`. ### Example 4 ```text Input: n = 5, edges = [[4, 0], [0, 1], [1, 2], [2, 3], [3, 4]], start = 0, end = 4 Output: 0 ``` The single road `[4, 0]` reaches `end` in one hop but costs `1`. The four-hop route `0 -> 1 -> 2 -> 3 -> 4` follows every signpost and costs `0`, so the answer is `0`. Fewest roads is not the same objective as fewest violations.

Constraints

  • 1 <= n <= 200000
  • 0 <= edges.length <= 300000
  • edges[i].length == 2
  • 0 <= edges[i][0], edges[i][1] < n and edges[i][0] != edges[i][1]
  • 0 <= start < n and 0 <= end < n
  • Parallel duplicates and anti-parallel pairs are allowed in edges
  • 0 <= answer <= edges.length, so every value fits in a signed 32-bit integer (use int in Java and C++; long / long long are not needed)

Examples

Input: (5, [[0, 1], [2, 1], [2, 3], [4, 3]], 0, 4)

Expected Output: 2

Input: (4, [[0, 1], [1, 2]], 0, 3)

Expected Output: -1

Hints

  1. Each road gives you two possible moves, not one: the signposted move and the reverse move. What weight does each of those two moves deserve?
  2. Plain breadth-first search answers 'fewest roads driven', which is a different question from 'fewest violations'. Example 4 is built to punish that confusion.
  3. Once every move weighs either 0 or 1, you do not need a full priority queue. Think about which end of a double-ended queue a free move belongs on so that the queue stays sorted by cost on its own.
Last updated: Aug 4, 2026

Loading coding console...

PracHub

Master your tech interviews with 9,000+ real questions from top companies.

Product

  • Questions
  • Learning Tracks
  • Interview Guides
  • Resources
  • Premium
  • For Universities

Browse

  • By Company
  • By Role
  • By Category
  • Topic Hubs
  • SQL Questions
  • AI Coding Questions
  • Compare Platforms
  • Discord Community

Support

  • support@prachub.com
  • (916) 541-4762

Legal

  • Privacy Policy
  • Terms of Service
  • About Us

© 2026 PracHub. All rights reserved.

Related Coding Questions

  • Count Rectangle Coverage on a Grid - Google (easy)
  • Deduplicate and Order Batch and Streaming Logs - Google (medium)
  • Count Overlapping Rectangle Updates on a Grid - Google (hard)
  • Find A Threshold-Limited Path With Minimum Required Safety - Google (medium)