Competitive Programming

The major prerequisites for this course include topics from elementary data structures and algorithms — specifically, asymptotic notation, arrays, lists, stacks, queues, search trees, trees, graphs; sorting, searching, BFS/DFS, shortest path algorithms (Dijkstra and Bellman-Ford), MST algorithms (e.g, Prim's and Kruskal's algorithms) and network flows (e.g, Ford-Fulkerson).

More specific prerequisites can be found in the weekly pages. Note that you need *not* be completely familiar with the *implementations* in the context of the algorithms mentioned above, although some competence with implementing basic data structures (arrays, lists, stacks, queues, and graphs) in some programming language will be helpful.

In particular, for the topics of DSU, BFS/DFS, MST, Shortest Paths, Flows — we will learn about concrete implementations in at least one language for these as a part of this course; but what we will *not *cover is proofs of correctness for either the correctness or the claimed performances of said algorithms).

You can also get your own competitive programming environment setup, and prepare by creating accounts on the contest platforms that we will use frequently, by following some of the resources listed here.