From 26b73ce439d1cb76b6be9836500ab7b242bc3ee1 Mon Sep 17 00:00:00 2001 From: subcrip Date: Thu, 5 Sep 2024 23:50:57 +0800 Subject: [PATCH] Update graph/virtual_tree.cc Signed-off-by: subcrip --- graph/virtual_tree.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/graph/virtual_tree.cc b/graph/virtual_tree.cc index 361a619..a920e04 100644 --- a/graph/virtual_tree.cc +++ b/graph/virtual_tree.cc @@ -24,8 +24,8 @@ struct virtual_tree { }; dfs(dfs, root, 0); } - // returned vertex number starts from 0 - vector> generate(vector pivots) { + // vertex number starts from 0 + pair>, vector> generate(vector pivots) { int m = pivots.size(); if (m == 0) return {}; sort_by_key(pivots.begin(), pivots.end(), expr(dfn[v], int v)); @@ -40,14 +40,16 @@ struct virtual_tree { sort_by_key(a.begin(), a.end(), expr(dfn[v], int v)); m = unique(a.begin(), a.end()) - a.begin(); unordered_map mp; + vector rev(m); for (int i = 0; i < m; ++i) { mp[a[i]] = i; + rev[i] = a[i]; } vector> ret(m); for (int i = 0; i < m - 1; ++i) { int l = lca.query(a[i], a[i + 1]); edgew(ret, mp[l], i + 1, ps[a[i + 1]] - ps[l]); } - return ret; + return { ret, rev }; } };