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

Switch Grass

Đề bài

Mô tả

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 AB 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

  • 1N,M,K,Q2×105
  • 1L106
  • Luôn tồn tại ít nhất hai cánh đồng có loại cỏ khác nhau
  • 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
Sau lần 1: cánh đồng 1→loại 1, 2→loại 1, 3→loại 2. Cạnh 2-3 (độ dài 1) nối hai loại khác nhau → đáp án 1.
Sau lần 2: 1→loại 1, 2→loại 3, 3→loại 2. Tất cả cạnh đều nối hai loại khác → min là 1, nhưng sau lần 3: 1→loại 2, 2→loại 3, 3→loại 2, cạnh 1-2 dài 3 → đáp án 3.

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