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/SP.md

97 lines
3.5 KiB
Markdown
Raw Normal View History

2020-06-04 01:42:57 +00:00
---
2020-06-15 23:19:07 +00:00
id: sp
2020-06-04 21:42:30 +00:00
title: "Shortest Paths"
2020-06-04 01:42:57 +00:00
author: Benjamin Qi
2020-06-05 00:21:03 +00:00
prerequisites:
-
- Gold - Breadth First Search
2020-06-04 01:42:57 +00:00
---
2020-06-17 22:18:07 +00:00
<module-excerpt>
- Shortest Path Without Negative Edge Weights
2020-06-05 00:21:03 +00:00
- Shortest Path With Negative Edge Weights
2020-06-04 21:42:30 +00:00
- All Pairs Shortest Path
2020-06-03 20:56:04 +00:00
2020-06-17 22:18:07 +00:00
</module-excerpt>
2020-06-05 00:28:32 +00:00
2020-06-03 21:08:42 +00:00
## Non-Negative Edge Weights
2020-06-03 20:56:04 +00:00
2020-06-03 21:08:42 +00:00
Use *Dijkstra's Algorithm*.
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
### Standard
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
- [Kattis SSSP Non-Negative](https://open.kattis.com/problems/shortestpath1)
- [CSES Shortest Routes I](https://cses.fi/problemset/task/1671)
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
### Tutorial
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
- CSES 13.2
- [cp-algo Dijkstra (Dense Graphs)](https://cp-algorithms.com/graph/dijkstra_sparse.html)
- [cp-algo Dijkstra (Sparse Graphs)](https://cp-algorithms.com/graph/dijkstra_sparse.html)
- Usually, it's this one that's applicable.
- [CPC.8](https://github.com/SuprDewd/T-414-AFLV/tree/master/08_graphs_2)
### Problems
- CSES
- [CSES Flight Discount](https://cses.fi/problemset/task/1195)
- [CSES Flight Routes](https://cses.fi/problemset/task/1196)
- [CSES Investigation](https://cses.fi/problemset/task/1202)
- USACO
- [Milk Pumping](http://www.usaco.org/index.php?page=viewproblem2&cpid=969)
- fairly standard application
- [Shortcut](http://usaco.org/index.php?page=viewproblem2&cpid=899)
- [Fine Dining](http://usaco.org/index.php?page=viewproblem2&cpid=861)
- Other
- [Lane Switching](https://open.kattis.com/contests/acpc17open/problems/laneswitching)
- [Robot Turtles](https://open.kattis.com/problems/robotturtles) [](100)
2020-06-03 20:56:04 +00:00
2020-06-03 21:08:42 +00:00
## All Pairs Shortest Path (APSP)
2020-06-03 20:56:04 +00:00
Use the *Floyd-Warshall* algorithm.
2020-06-04 21:42:30 +00:00
### Standard
- [CSES Shortest Routes II](https://cses.fi/problemset/task/1672)
- [Kattis APSP (with negative weights)](https://open.kattis.com/problems/allpairspath)
2020-06-03 21:08:42 +00:00
### Tutorial
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
- CPH 13.3
- [cp-algo Floyd-Warshall](https://cp-algorithms.com/graph/all-pair-shortest-path-floyd-warshall.html)
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
### Problems
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
- [USACO Moortal Cowmbat](http://usaco.org/index.php?page=viewproblem2&cpid=971)
- Use APSP before running DP.
- [SPOJ Arbitrage](https://www.spoj.com/problems/ARBITRAG/)
2020-06-03 20:56:04 +00:00
2020-06-03 21:08:42 +00:00
## Negative Edge Weights
2020-06-03 20:56:04 +00:00
2020-06-08 19:51:58 +00:00
- Hasn't appeared in recent USACO Gold as far as I know.
- Usually Bellman-Ford is used.
- If no negative cycles, can use [Shortest Path Faster Algorithm](https://en.wikipedia.org/wiki/Shortest_Path_Faster_Algorithm) or modify Dijkstra slightly (though the same running time bound no longer applies).
2020-06-04 21:42:30 +00:00
### Tutorial
2020-06-08 19:51:58 +00:00
- [cp-algo Bellman Ford](https://cp-algorithms.com/graph/bellman_ford.html)
- [Topcoder Graphs Pt 3](https://www.topcoder.com/community/data-science/data-science-tutorials/introduction-to-graphs-and-their-data-structures-section-3/)
2020-06-04 21:42:30 +00:00
You can also use shortest path algorithms to solve the following problem (a very simple [linear program](https://en.wikipedia.org/wiki/Linear_programming)).
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
> Given variables $x_1,x_2,\ldots,x_N$ with constraints in the form $x_i-x_j\ge c$, compute a feasible solution.
2020-06-08 19:51:58 +00:00
- [Linear Programming Trick](https://www.cs.rit.edu/~spr/COURSES/ALG/MIT/lec18.pdf)
2020-06-04 21:42:30 +00:00
### Problems
2020-06-03 20:56:04 +00:00
2020-06-04 21:42:30 +00:00
- General
- [CSES High Score](https://cses.fi/problemset/task/1673)
- [Kattis SSSP Negative](https://open.kattis.com/problems/shortestpath3)
- [CSES (Negative) Cycle Finding](https://cses.fi/problemset/task/1197)
- Simple Linear Programming
- [Restore Array](https://oj.uz/problem/view/RMI19_restore)
- [Art](https://codeforces.com/gym/102394/problem/A) (basically same as above)
2020-06-10 21:54:52 +00:00
- Timeline (Camp)
- equivalent to [Timeline (Gold)](http://www.usaco.org/index.php?page=viewproblem2&cpid=1017) except $N,C\le 5000$ and negative values of $x$ are possible.