CSES - Flight Routes Check
Author: Michael Cao
Appears In
In this problem, given a directed graph with nodes and edges, we need to return "YES" if we can travel between all pairs of vertices or "NO" and give pair of vertices we can't travel between otherwise.
Main Idea
Let's say if you can go from vertex to vertex . Additionally, let's define the directed graph given in the statement as and the reverse of it (where an edge becomes ) as . Then, if for in both and , the answer is "YES".
To compute , we can run a dfs from from vertex and check if you can reach vertex for all . If we can't, then print if you're running the DFS on and otherwise.
Proof
Let's do a proof by contradiction. Assume that is true for all vertices in both and , and there exists a pair of vertices such that . Since is true in , then must be true in . Additionally, must be true in . So, you can travel from , which contradicts the statement that . Thus, for all vertices .
Example Code
C++
#include <bits/stdc++.h> // see C++ Tips & Tricksusing namespace std;using ll = long long;using vi = vector<int>;#define pb push_back#define rsz resize#define all(x) begin(x), end(x)#define sz(x) (int)(x).size()
Join the USACO Forum!
Stuck on a problem, or don't understand a module? Join the USACO Forum and get help from other competitive programmers!