trang chủ / bài tập / buildforest

Xây dựng rừng

Đề bài

Mô tả

Một rừng có hướng có trọng số là một đồ thị có hướng không chu trình, có trọng số, trong đó từ mỗi đỉnh có nhiều nhất một cung đi ra.

Gốc của đỉnh v, ký hiệu root(v), là đỉnh không có cung đi ra và có thể đến được từ v bằng cách di chuyển dọc theo các cung. Độ sâu của đỉnh v, ký hiệu depth(v), là tổng trọng số các cung trên đường đi từ v đến gốc của nó.

Ta xây dựng rừng bằng N thao tác thêm đỉnh, thực hiện lần lượt. Thao tác thứ i được mô tả bởi bộ số (k,v1,x1,v2,x2,,vk,xk) và có nghĩa: thêm đỉnh số i cùng k cung vào đồ thị, trong đó cung thứ j đi từ đỉnh root(vj) đến đỉnh i với trọng số depth(vj)+xj (các giá trị rootdepth được tính tại thời điểm thêm cung đó). Nếu k=0 thì chỉ thêm đỉnh i, không thêm cung nào.

Hãy tính tổng trọng số tất cả các cung của rừng thu được sau khi thực hiện toàn bộ N thao tác, theo modulo 109+7.

Dữ liệu vào

  • Dòng đầu chứa số nguyên N: số thao tác thêm đỉnh.
  • N dòng tiếp theo, dòng thứ i mô tả thao tác thêm đỉnh i: bắt đầu là số nguyên k (0ki1), sau đó là 2k số nguyên v1,x1,v2,x2,,vk,xk.

Các thao tác được cho theo đúng thứ tự áp dụng. Dữ liệu đảm bảo việc thêm đỉnh không tạo ra khuyên (cung nối một đỉnh với chính nó) hay cung bội.

Dữ liệu ra

In ra một số nguyên duy nhất: tổng trọng số tất cả các cung của đồ thị cuối cùng, theo modulo 109+7.

Ràng buộc

  • 1N105
  • 1vji1, |xj|109
  • Tổng các giá trị k của tất cả thao tác không vượt quá 105

Ví dụ

Input Output Giải thích
5
0
1 1 5
0
0
2 3 1 4 3
9 Đỉnh 2: cung 12 trọng số 5. Đỉnh 5: cung 35 trọng số 1 và cung 45 trọng số 3. Tổng: 5+1+3=9.
6
0
0
1 2 1
2 1 5 2 2
1 1 2
1 3 4
30 Đỉnh 3: cung root(2)=23 trọng số 0+1=1. Đỉnh 4: cung root(1)=14 trọng số 0+5=5 và cung root(2)=34 trọng số 1+2=3. Đỉnh 5: cung root(1)=45 trọng số 5+2=7. Đỉnh 6: cung root(3)=56 trọng số 10+4=14. Tổng: 1+5+3+7+14=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