Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void dfs(int u, int p, vector<int> &leaf, vector<vector<int>> &G)
- {
- if (G[u].size() == 1)
- {
- leaf.push_back(u);
- }
- for (int v : G[u])
- {
- if (v == p)
- continue;
- dfs(v, u, leaf, G);
- }
- }
- int ans;
- int dfs1(int u, int p, int mul, vector<int> &nodeVal, vector<int> &leaf, vector<vector<int>> &G)
- {
- if (p != -1 && binary_search(leaf.begin(), leaf.end(), u))
- {
- ans = max(ans, mul);
- }
- for (int v : G[u])
- {
- if (v == p)
- continue;
- dfs1(v, u, mul * nodeVal[u], nodeVal, leaf, G);
- }
- }
- void solve()
- {
- int n;
- cin >> n;
- vector<int> nodeVal(n);
- for (int i = 0; i < n; i++)
- {
- cin >> nodeVal[i];
- }
- int x, y;
- cin >> x >> y;
- vector<vector<int>> edges(n - 1);
- for (int i = 0; i < n - 1; i++)
- {
- int u;
- int v;
- cin >> u >> v;
- edges[i] = {u, v};
- }
- int N = nodeVal.size();
- ans = INT_MIN;
- vector<vector<int>> G(N);
- for (int i = 0; i < edges.size(); i++)
- {
- int u = edges[i][0] - 1;
- int v = edges[i][1] - 1;
- G[u].push_back(v);
- G[v].push_back(u);
- }
- vector<int> leaf;
- dfs(0, -1, leaf, G);
- see(leaf);
- sort(leaf.begin(), leaf.end());
- ans = INT_MIN;
- for (int i = 0; i < leaf.size(); i++)
- {
- dfs1(leaf[i], -1, nodeVal[leaf[i]], nodeVal, leaf, G);
- }
- cout << ans << endl;
- }
Add Comment
Please, Sign In to add comment