1class Solution {2public:3vector<int> adj[100009];4vector<int> d[55];5int dis[100009];6void dfs(vector<int> &nums, vector<int> &ans, int i, int p, int h1) {7int h = nums[i];8dis[i] = h1;9ans[i] = -1;10int val = -1;11for (int w = 1; w <= 50; w++) {12if (__gcd(h, w) == 1) {13if (d[w].size()) {14int u = d[w].back();15if (dis[u] > val) {16val = dis[u];17ans[i] = u;18}19}20}21}22d[h].push_back(i);23for (auto x : adj[i]) {24if (x == p) continue;25dfs(nums, ans, x, i, h1 + 1);26}27d[h].pop_back();28}29vector<int> getCoprimes(vector<int> &nums, vector<vector<int>> &edges) {30int n = nums.size();31for (int i = 0; i < n; i++) {32adj[i].clear();33}34for (int i = 0; i < n - 1; i++) {35adj[edges[i][0]].push_back(edges[i][1]);36adj[edges[i][1]].push_back(edges[i][0]);37}38vector<int> ans(n);39dfs(nums, ans, 0, -1, 0);40return ans;41}42};