trang chủ / đề bài / switchgrass

Switch Grass

Đề bài

Mô tả

Có N cánh đồng và M con đường hai chiều. Mỗi cánh đồng trồng một trong K loại cỏ. Đôi khi Farmer John quyết định thay đổi loại cỏ của một cánh đồng. Sau mỗi thay đổi, hãy tìm khoảng cách ngắn nhất giữa hai cánh đồng có loại cỏ khác nhau.

Khoảng cách giữa hai cánh đồng là độ dài đường đi ngắn nhất nối chúng.

Dữ liệu vào

Dòng đầu chứa bốn số nguyên N, M, K, Q.

  • M dòng tiếp theo, mỗi dòng ba số nguyên A, B, L: con đường hai chiều giữa cánh đồng A và B với độ dài L.

Dòng tiếp theo chứa N số nguyên: loại cỏ ban đầu của mỗi cánh đồng (từ 1 đến K).

  • Q dòng tiếp theo, mỗi dòng hai số nguyên A, B: thay đổi loại cỏ cánh đồng A thành loại B.

Dữ liệu ra

In Q dòng, dòng thứ i là khoảng cách ngắn nhất giữa hai cánh đồng có loại cỏ khác nhau sau lần cập nhật thứ i.

Ràng buộc

  • 1≤N,M,K,Q≤2×105
  • 1≤L≤106
  • Đồ thị liên thông: luôn có đường đi giữa hai cánh đồng bất kỳ
  • Luôn tồn tại ít nhất hai cánh đồng có loại cỏ khác nhau (kể cả sau mỗi lần cập nhật)
  • Không có hai con đường cùng nối một cặp cánh đồng
  • 30% test: mỗi cánh đồng có bậc không quá 10

Ví dụ

Input Output Giải thích
3 2 3 4
1 2 3
2 3 1
1 1 2
3 3
2 3
1 2
2 2
1
3
3
1
Loại cỏ ban đầu: (1,1,2).
Sau lần 1 (cánh đồng 3 sang loại 3): (1,1,3), đường 2-3 nối hai loại khác nhau, đáp án 1.
Sau lần 2 (cánh đồng 2 sang loại 3): (1,3,3), chỉ còn đường 1-2 dài 3.
Sau lần 3 (cánh đồng 1 sang loại 2): (2,3,3), vẫn chỉ có đường 1-2, đáp án 3.
Sau lần 4 (cánh đồng 2 sang loại 2): (2,2,3), đường 2-3 dài 1.
5 6 3 3
1 2 4
2 3 2
3 4 7
4 5 3
1 5 9
2 5 5
1 1 2 2 3
3 1
5 2
2 3
3
5
2
Loại cỏ ban đầu: (1,1,2,2,3).
Sau lần 1: (1,1,1,2,3), đường 4-5 dài 3 là ngắn nhất trong các đường nối hai loại khác nhau.
Sau lần 2: (1,1,1,2,2), đường 4-5 không còn hợp lệ, đáp án tăng lên 5 (đường 2-5).
Sau lần 3: (1,3,1,2,2), đường 2-3 dài 2.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0