This repository has been archived on 2022-06-22. You can view files and clone it, but cannot push or open issues or pull requests.
usaco-guide/content/5_Gold/TopoSort.md

61 lines
3.4 KiB
Markdown
Raw Normal View History

2020-06-04 01:42:57 +00:00
---
2020-06-15 23:19:07 +00:00
id: toposort
2020-06-04 05:39:49 +00:00
title: "Topological Sort"
author: Benjamin Qi, Michael Cao
2020-06-05 00:21:03 +00:00
prerequisites:
2020-06-22 20:51:12 +00:00
- Gold - Breadth First Search
- Gold - Introduction to Dynamic Programming
2020-06-23 02:17:59 +00:00
description: "?"
2020-06-04 01:42:57 +00:00
---
To review, a **directed** graph consists of edges that can only be traversed in one direction. Additionally, a **acyclic** graph defines a graph which does not contain cycles, meaning you are unable to traverse across one or more edges and return to the node you started on. Putting these definitions together, a **directed acyclic** graph, sometimes abbreviated as DAG, is a graph which has edges which can only be traversed in one direction and does not contain cycles.
2020-06-04 05:39:49 +00:00
2020-06-23 02:17:59 +00:00
## Topological Sort
- [CSES Course Schedule](https://cses.fi/problemset/task/1679)
A [topological sort](https://en.wikipedia.org/wiki/Topological_sorting) of a directed acyclic graph is a linear ordering of its vertices such that for every directed edge $u\to v$ from vertex $u$ to vertex $v$, $u$ comes before $v$ in the ordering.
2020-06-03 21:08:42 +00:00
2020-06-23 02:17:59 +00:00
### Tutorial
2020-06-03 20:56:04 +00:00
- CPH 16.1, 16.2
2020-06-08 19:51:58 +00:00
- DFS
2020-06-03 20:56:04 +00:00
- [cp-algorithms](https://cp-algorithms.com/graph/topological-sort.html)
2020-06-08 19:51:58 +00:00
- DFS
2020-06-05 00:21:03 +00:00
- [CSAcademy](https://csacademy.com/lesson/topological_sorting)
2020-06-08 19:51:58 +00:00
- both BFS, DFS
2020-06-22 14:26:06 +00:00
Consider [Khan's Algorithm](https://en.wikipedia.org/wiki/Topological_sorting#Kahn's_algorithm) for topological sorting.
2020-06-23 02:17:59 +00:00
### Problems
- [Milking Order](http://www.usaco.org/index.php?page=viewproblem2&cpid=838)
- Binary search and check if a valid topological sort exists.
- [CSES Course Schedule II](https://cses.fi/problemset/task/1757)
- Tricky!
2020-06-23 17:27:41 +00:00
- equivalent to [Minimal Labels](https://codeforces.com/contest/825/problem/E)
2020-06-23 02:17:59 +00:00
## Dynamic Programming
2020-06-22 14:26:06 +00:00
2020-06-23 01:00:35 +00:00
- [PAPS 9.1](https://www.csc.kth.se/~jsannemo/slask/main.pdf)
One useful property of directed acyclic graphs is, as the name suggests, that there exists no cycles. If we consider each node in the graph as a state, we can perform dynamic programming on the graph if we process the states in an order that guarantees for every edge, $u\to v$ that $u$ is processed before $v$. Fortunately, this is the exact definition of a topological sort!
2020-06-23 02:17:59 +00:00
Let's consider the classical problem [CSES Longest Flight Route](https://cses.fi/problemset/task/1680), where we must find the longest path in a DAG.
2020-06-23 02:17:59 +00:00
<spoiler title="Solution">
Let `dp[curr] = longest path ending at the node curr`. Then, if we process states in topological order, the transition is relatively straightforward: `dp[curr] = max of all dp[prev] where prev represents a node with an edge going into the current node` (word better?). To reiterate, since the states a processed in topological order, we can guarantee that all possible `dp[prev]` are computed before we compute `dp[curr]`.
</spoiler>
2020-06-23 02:17:59 +00:00
However, not all problems clearly give you directed acyclic graphs (ex. [Plat - Cave Paintings](http://usaco.org/index.php?page=viewproblem2&cpid=996)). An important step in many problems is to reduce the statement into a directed acyclic graph. See the editorial of the linked problem for more information.
2020-06-23 02:17:59 +00:00
(Ben - this last paragraph doesn't seem very helpful.)
## Problems
- [CSES Game Routes](https://cses.fi/problemset/task/1681)
- counting paths on DAG
- [Quantum](https://open.kattis.com/contests/acpc17open/problems/quantumsuperposition)
- enumerating paths on DAG
- [USACO Gold - Timeline](http://www.usaco.org/index.php?page=viewproblem2&cpid=1017)
2020-06-23 17:27:41 +00:00
- not explicitly given, but graph is a DAG