diff options
| author | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-03-10 19:58:50 +0100 |
|---|---|---|
| committer | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-03-10 19:58:50 +0100 |
| commit | 0f29ac59c2bf0e5eafc2a6fa436e3070085e3a1d (patch) | |
| tree | 76ee14d540722a15007aaaa51e751650024a8bca /graph/test/binary_lifting.cpp | |
| parent | ffa3fde34b667dff3ffe011e1f80f43ee02d2f82 (diff) | |
improvde tests
Diffstat (limited to 'graph/test/binary_lifting.cpp')
| -rw-r--r-- | graph/test/binary_lifting.cpp | 54 |
1 files changed, 14 insertions, 40 deletions
diff --git a/graph/test/binary_lifting.cpp b/graph/test/binary_lifting.cpp index e1cf7d2..05b903a 100644 --- a/graph/test/binary_lifting.cpp +++ b/graph/test/binary_lifting.cpp @@ -1,22 +1,8 @@ -#include <bits/stdc++.h> -using namespace std; - +#include "util.cpp" #include "../binary_lifting.cpp" -mt19937 rd(0); - -void test(const vector<vector<int>> &old_adj, int root) { - int n = old_adj.size(); - vector<int> perm(n); - iota(perm.begin(), perm.end(), 0); - ranges::shuffle(perm, rd); - vector<vector<int>> adj(n); - for (int i = 0; i < n; i++) { - auto &a = adj[perm[i]] = old_adj[i]; - for (int &v: a) v = perm[v]; - ranges::shuffle(a, rd); - } - root = perm[root]; +void test(vector<vector<int>> &adj, int root) { + int n = adj.size(); vector<int> parent(n); function<void(int,int)> dfs = [&](int u, int p) { @@ -37,18 +23,17 @@ void test(const vector<vector<int>> &old_adj, int root) { Lift lift(adj, root); for (int i = 0; i < n; i++) assert(lift.depth(i) == depth(i)); - uniform_int_distribution<int> distrib(0, n-1); for (int i = 0; i < 1000; i++) { - int v = distrib(rd); - int d = distrib(rd); + int v = util::randint(n); + int d = util::randint(n); int u = lift.lift(v, d); assert(is_ancestor(u, v)); if (d <= depth(v)) assert(depth(u) == d); else assert(u == v); } for (int i = 0; i < 1000; i++) { - int u = distrib(rd); - int v = distrib(rd); + int u = util::randint(n); + int v = util::randint(n); int lca = lift.lca(u, v); assert(is_ancestor(lca, u)); assert(is_ancestor(lca, v)); @@ -67,27 +52,16 @@ int main() { } { // Path - vector<vector<int>> adj(100); - for (int i = 1; i < 100; i++) { - adj[i-1].push_back(i); - adj[i].push_back(i-1); - } - test(adj, 0); - test(adj, 99); - test(adj, 40); + vector<vector<int>> adj = util::path(100); + int left = 0, mid = 40, right = 99; + util::shuffle_graph(adj, left, mid, right); + test(adj, left); + test(adj, mid); + test(adj, right); } { // Random - vector<vector<int>> adj(1000); - for (int i = 1; i < 1000; i++) { - uniform_int_distribution<int> distrib(0, i-1); - int p = distrib(rd); - adj[p].push_back(i); - adj[i].push_back(p); - } + vector<vector<int>> adj = util::random_tree(1000); test(adj, 0); - test(adj, 300); - test(adj, 600); - test(adj, 900); } } |
