DDSA
Advertisement

3243. Shortest Distance After Road Addition Queries I

3243.cs
C#
public class Solution
{
    public int[] ShortestDistanceAfterQueries(int n, int[][] queries)
    {
        int[] ans = new int[queries.Length];
        int[] dist = new int[n];
        List<int>[] graph = new List<int>[n];

        for (int i = 0; i < n; ++i)
        {
            dist[i] = i;
            graph[i] = new List<int>();
        }

        for (int i = 0; i < n - 1; ++i)
            graph[i].Add(i + 1);

        for (int i = 0; i < queries.Length; ++i)
        {
            int u = queries[i][0];
            int v = queries[i][1];
            graph[u].Add(v);
            if (dist[u] + 1 < dist[v])
            {
                dist[v] = dist[u] + 1;
                Bfs(graph, v, dist);
            }
            ans[i] = dist[n - 1];
        }

        return ans;
    }

    private void Bfs(List<int>[] graph, int start, int[] dist)
    {
        Queue<int> q = new Queue<int>();
        q.Enqueue(start);
        while (q.Count > 0)
        {
            int u = q.Dequeue();
            foreach (int v in graph[u])
            {
                if (dist[u] + 1 < dist[v])
                {
                    dist[v] = dist[u] + 1;
                    q.Enqueue(v);
                }
            }
        }
    }
}
Advertisement
Was this solution helpful?