|
| 1 | +<h2><a href="https://leetcode.com/problems/minimum-cost-walk-in-weighted-graph">3108. Minimum Cost Walk in Weighted Graph</a></h2><h3>Hard</h3><hr><p>There is an undirected weighted graph with <code>n</code> vertices labeled from <code>0</code> to <code>n - 1</code>.</p> |
| 2 | + |
| 3 | +<p>You are given the integer <code>n</code> and an array <code>edges</code>, where <code>edges[i] = [u<sub>i</sub>, v<sub>i</sub>, w<sub>i</sub>]</code> indicates that there is an edge between vertices <code>u<sub>i</sub></code> and <code>v<sub>i</sub></code> with a weight of <code>w<sub>i</sub></code>.</p> |
| 4 | + |
| 5 | +<p>A walk on a graph is a sequence of vertices and edges. The walk starts and ends with a vertex, and each edge connects the vertex that comes before it and the vertex that comes after it. It's important to note that a walk may visit the same edge or vertex more than once.</p> |
| 6 | + |
| 7 | +<p>The <strong>cost</strong> of a walk starting at node <code>u</code> and ending at node <code>v</code> is defined as the bitwise <code>AND</code> of the weights of the edges traversed during the walk. In other words, if the sequence of edge weights encountered during the walk is <code>w<sub>0</sub>, w<sub>1</sub>, w<sub>2</sub>, ..., w<sub>k</sub></code>, then the cost is calculated as <code>w<sub>0</sub> & w<sub>1</sub> & w<sub>2</sub> & ... & w<sub>k</sub></code>, where <code>&</code> denotes the bitwise <code>AND</code> operator.</p> |
| 8 | + |
| 9 | +<p>You are also given a 2D array <code>query</code>, where <code>query[i] = [s<sub>i</sub>, t<sub>i</sub>]</code>. For each query, you need to find the minimum cost of the walk starting at vertex <code>s<sub>i</sub></code> and ending at vertex <code>t<sub>i</sub></code>. If there exists no such walk, the answer is <code>-1</code>.</p> |
| 10 | + |
| 11 | +<p>Return <em>the array </em><code>answer</code><em>, where </em><code>answer[i]</code><em> denotes the <strong>minimum</strong> cost of a walk for query </em><code>i</code>.</p> |
| 12 | + |
| 13 | +<p> </p> |
| 14 | +<p><strong class="example">Example 1:</strong></p> |
| 15 | + |
| 16 | +<div class="example-block"> |
| 17 | +<p><strong>Input:</strong> <span class="example-io">n = 5, edges = [[0,1,7],[1,3,7],[1,2,1]], query = [[0,3],[3,4]]</span></p> |
| 18 | + |
| 19 | +<p><strong>Output:</strong> <span class="example-io">[1,-1]</span></p> |
| 20 | + |
| 21 | +<p><strong>Explanation:</strong></p> |
| 22 | +<img alt="" src="https://assets.leetcode.com/uploads/2024/01/31/q4_example1-1.png" style="padding: 10px; background: rgb(255, 255, 255); border-radius: 0.5rem; width: 351px; height: 141px;" /> |
| 23 | +<p>To achieve the cost of 1 in the first query, we need to move on the following edges: <code>0->1</code> (weight 7), <code>1->2</code> (weight 1), <code>2->1</code> (weight 1), <code>1->3</code> (weight 7).</p> |
| 24 | + |
| 25 | +<p>In the second query, there is no walk between nodes 3 and 4, so the answer is -1.</p> |
| 26 | + |
| 27 | +<p><strong class="example">Example 2:</strong></p> |
| 28 | +</div> |
| 29 | + |
| 30 | +<div class="example-block"> |
| 31 | +<p><strong>Input:</strong> <span class="example-io">n = 3, edges = [[0,2,7],[0,1,15],[1,2,6],[1,2,1]], query = [[1,2]]</span></p> |
| 32 | + |
| 33 | +<p><strong>Output:</strong> <span class="example-io">[0]</span></p> |
| 34 | + |
| 35 | +<p><strong>Explanation:</strong></p> |
| 36 | +<img alt="" src="https://assets.leetcode.com/uploads/2024/01/31/q4_example2e.png" style="padding: 10px; background: rgb(255, 255, 255); border-radius: 0.5rem; width: 211px; height: 181px;" /> |
| 37 | +<p>To achieve the cost of 0 in the first query, we need to move on the following edges: <code>1->2</code> (weight 1), <code>2->1</code> (weight 6), <code>1->2</code> (weight 1).</p> |
| 38 | +</div> |
| 39 | + |
| 40 | +<p> </p> |
| 41 | +<p><strong>Constraints:</strong></p> |
| 42 | + |
| 43 | +<ul> |
| 44 | + <li><code>2 <= n <= 10<sup>5</sup></code></li> |
| 45 | + <li><code>0 <= edges.length <= 10<sup>5</sup></code></li> |
| 46 | + <li><code>edges[i].length == 3</code></li> |
| 47 | + <li><code>0 <= u<sub>i</sub>, v<sub>i</sub> <= n - 1</code></li> |
| 48 | + <li><code>u<sub>i</sub> != v<sub>i</sub></code></li> |
| 49 | + <li><code>0 <= w<sub>i</sub> <= 10<sup>5</sup></code></li> |
| 50 | + <li><code>1 <= query.length <= 10<sup>5</sup></code></li> |
| 51 | + <li><code>query[i].length == 2</code></li> |
| 52 | + <li><code>0 <= s<sub>i</sub>, t<sub>i</sub> <= n - 1</code></li> |
| 53 | + <li><code>s<sub>i</sub> != t<sub>i</sub></code></li> |
| 54 | +</ul> |
0 commit comments