From f005f6de6adcc84c49be7bdc8c7621a5feef934a Mon Sep 17 00:00:00 2001 From: caoash Date: Tue, 16 Jun 2020 17:57:23 -0500 Subject: [PATCH] minor changes to dp (added an LIS problem), added DP on DAG and some definitions --- content/5_Gold/DP.md | 6 ++++-- content/5_Gold/TopoSort.md | 28 ++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/content/5_Gold/DP.md b/content/5_Gold/DP.md index 6152562..3739a6c 100644 --- a/content/5_Gold/DP.md +++ b/content/5_Gold/DP.md @@ -76,7 +76,7 @@ The following USACO problems don't fall into any of the categories below. Arrang * Reconsider the state. * USACO Gold * [Fruit Feast](http://www.usaco.org/index.php?page=viewproblem2&cpid=574) - * straightforward + * `dp[fullness] = whether you can achieve this fullness` * [Talent Show](http://www.usaco.org/index.php?page=viewproblem2&cpid=839) * binary search + knapsack on weight * CF @@ -113,6 +113,8 @@ The following USACO problems don't fall into any of the categories below. Arrang (add?) * [LIS in Quadratic Time](https://leetcode.com/problems/longest-increasing-subsequence/) - * Try to improve to $O(N\log N)$. + * Try to improve to $O(N\log N)$: [Solution](https://cp-algorithms.com/sequences/longest_increasing_subsequence.html). + * [Cowjog](http://www.usaco.org/index.php?page=viewproblem2&cpid=489) + * Not so easy to see, but direct application of LIS. * [Sort It Out (USACO Platinum)](http://www.usaco.org/index.php?page=viewproblem2&cpid=865) * Challenging! diff --git a/content/5_Gold/TopoSort.md b/content/5_Gold/TopoSort.md index 727bbd3..be62700 100644 --- a/content/5_Gold/TopoSort.md +++ b/content/5_Gold/TopoSort.md @@ -1,19 +1,15 @@ --- id: toposort title: "Topological Sort" -author: Benjamin Qi +author: Benjamin Qi, Michael Cao prerequisites: - - Gold - Breadth First Search --- -A [topological sort](https://en.wikipedia.org/wiki/Topological_sorting) of a directed 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. +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. -## Example Problems - - - [CSES Course Schedule](https://cses.fi/problemset/task/1679) - - [CSES Longest Flight Route](https://cses.fi/problemset/task/1680) - - [CSES Game Routes](https://cses.fi/problemset/task/1681) +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. ## Tutorial @@ -23,12 +19,28 @@ A [topological sort](https://en.wikipedia.org/wiki/Topological_sorting) of a dir - DFS - [CSAcademy](https://csacademy.com/lesson/topological_sorting) - both BFS, DFS + +## Dynamic Programming +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! + +Let's consider a classical problem (see Longest Flight Route) where we must find the longest path in a Directed Acyclic Graph. 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]`. + +However, not all problems clearly give you directed acyclic graphs (see [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. + +## Example Problems + + - [CSES Course Schedule](https://cses.fi/problemset/task/1679) + - [CSES Longest Flight Route](https://cses.fi/problemset/task/1680) + - [CSES Game Routes](https://cses.fi/problemset/task/1681) + ## Problems - USACO Gold - [Timeline](http://www.usaco.org/index.php?page=viewproblem2&cpid=1017) + - Dynamic Programming on DAG. - [Milking Order](http://www.usaco.org/index.php?page=viewproblem2&cpid=838) + - Binary search and check if a valid topological sort exists. Consider [Khan's Algorithm](https://en.wikipedia.org/wiki/Topological_sorting#Kahn's_algorithm) for topological sorting. - Other - [Minimal Labels](http://codeforces.com/contest/825/problem/E) [](53) - - [Quantum](https://open.kattis.com/contests/acpc17open/problems/quantumsuperposition) [](84) \ No newline at end of file + - [Quantum](https://open.kattis.com/contests/acpc17open/problems/quantumsuperposition) [](84)