Tổng GCD Trên Đường Đi Tổ Tiên

Đề bài

Mô tả

Cho một cây có gốc gồm n đỉnh, gốc tại đỉnh 1. Mỗi đỉnh v có một giá trị xv là số nguyên không âm không vượt quá 1012.

Đỉnh u được gọi là tổ tiên của đỉnh v nếu u nằm trên đường đi ngắn nhất từ gốc tới v (mỗi đỉnh cũng được coi là tổ tiên của chính nó).

Với cặp (u,v)u là tổ tiên của v, giả sử các đỉnh trên đường đi từ u tới vu=t1,t2,,tk=v. Định nghĩa

f(u,v)=gcd(xt1,xt2,,xtk).

Đặc biệt f(u,u)=xu, và quy ước gcd(0,y)=gcd(y,0)=y, kể cả gcd(0,0)=0.

Yêu cầu: tính

u là tổ tiên của vf(u,v)(mod109+7).

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên x1,x2,,xn.
  • n1 dòng tiếp theo, mỗi dòng chứa hai số nguyên a,b mô tả một cạnh nối hai đỉnh ab của cây.

Dữ liệu ra

In ra một số nguyên duy nhất là tổng cần tính, lấy theo modulo 109+7.

Ràng buộc

  • 2n105
  • 0xi1012
  • 1a,bn, ab
  • Đồ thị cho trước là một cây liên thông.

Ví dụ

Input Output Giải thích
5
4 5 6 0 8
1 2
1 3
1 4
4 5
42 9 cặp tổ tiên–con cháu (tính cả (v,v)). Ví dụ f(1,5)=gcd(4,0,8)=4. Tổng các f bằng 42.
7
0 2 3 0 0 0 0
1 2
1 3
2 4
2 5
3 6
3 7
30 gcd(0,y)=y nên các đường đi từ gốc lan toả giá trị khác 0 xuống các con cháu. Tổng cuối cùng bằng 30.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0