Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int main() {
- nv = readInt();
- for (int i = 0; i < nv-1; i++) {
- int u, v; u = readInt(); v = readInt();
- adj[u].push_back(v);
- }
- for (int i = 0; i < nv; i++) {
- int x; x = readInt();
- init[i] = x;
- }
- memset(t2, 0x3f, sizeof t2);
- dfs(0);
- build();
- int Q; Q = readInt();
- for (int qq = 0; qq < Q; qq++) {
- int k, x1int, y1int, a, b, c, d, u, v;
- k = readInt();
- x1int = readInt();
- y1int = readInt();
- a = readInt();
- b = readInt();
- c = readInt();
- d = readInt();
- u = readInt();
- v = readInt();
- long long x = x1int, y = y1int;
- for (int i = 0; i < k; i++) {
- t1.insert(find1[(int)x], y);
- t1.insert(find3[(int)x], -y);
- x = (a*x + b) % nv;
- y = (c*y + d) % mod;
- }
- int lca = query(min(find2[u], find2[v]), max(find2[u], find2[v])+1);
- long long ans = 0;
- ans += t1.query_range(min(find1[u], find1[lca]), max(find1[u], find1[lca]));
- ans += t1.query_range(min(find1[v], find1[lca]), max(find1[v], find1[lca]));
- ans -= t1.query_range(find1[lca], find1[lca]);
- writeInt<long long>(ans, '\n');
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement