Объясните как реализовывать и пользоваться cписками смежности.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | atcoder_official | 162 |
3 | maomao90 | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | djm03178 | 152 |
Объясните как реализовывать и пользоваться cписками смежности.
Название |
---|
В списках смежности используется 3 массива ls, r, prev.
В ls[v] хранится номер последнего ребра с которым связана вершина v, r[i] будет хранить номер вершины на которую ведет ребро i, prev[i] хранит номер ребра с которым вершина v была связана до ребра i.
Реализация:
m — кол-во ребер.
Если честно, то я так и не понял в чем суть. Список смежности — это структурка, где для каждой вершины храним в динамическом списке смежные вершины. В C++ делается через std::vector.
UPD:
Легче всего, мне кажется, так делается (на с++):
Получается, что graph[v] будет хранить список вершин связанных с вершиной v. Вот код:
И вот собственно dfs():
Мне кажется, или graph[v] будет хранить вектор векторов, а не список смежных вершин?
graph[][] сам по себе вектор векторов, а graph[v] -- это вектор (список вершин)
Я имею ввиду, что если объявлять:
То graph будет массивом, где в одной ячейке вектор векторов. graph получается трехмерным.
Да, это неверно. Нужно просто
или же
Да, точно! Просто я перепутал: вместо круглых скобок, написал квадратные)
моё http://codeforces.me/blog/entry/5195 подробное объяснение на эту тему, если есть вопросы — задавай!