Tô màu con đường
Xem dạng PDF📖 Bài giảng & lời giải: đây là Bài tập 8 trong bài giảng Bài 47: Heavy-Light Decomposition trên blog Lập trình thuật toán – có lý thuyết, mô phỏng từng bước, gợi ý và code C++ / Python.
⚠️ Lưu ý: hãy đảm bảo em đã thật sự cố gắng tự làm bài trước, rồi mới xem gợi ý và lời giải nhé!
🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên
📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com
Cho cây $n$ đỉnh, đánh số $1..n$; đỉnh $i$ được tô màu $c_i$. Có $q$ thao tác thuộc một trong hai loại:
1 u v c: tô lại màu $c$ cho mọi đỉnh trên đường đi từ $u$ tới $v$ (tính cả $u$ và $v$).2 u v: viết lần lượt màu của các đỉnh trên đường đi từ $u$ tới $v$ thành một dãy; in ra số đoạn màu của dãy đó. Một đoạn màu là một dãy con liên tiếp dài nhất gồm các phần tử cùng màu; ví dụ dãy1 1 2 2 2 1có $3$ đoạn màu là1 1,2 2 2và1.
Dữ liệu vào
- Dòng 1: hai số nguyên $n, q$ ($1 \le n, q \le 5 \cdot 10^4$).
- Dòng 2: $n$ số nguyên $c_1, c_2, \ldots, c_n$ ($1 \le c_i \le 10^9$).
- $n - 1$ dòng tiếp theo, mỗi dòng gồm hai số nguyên $u, v$ ($1 \le u, v \le n$, $u \ne v$) là một cạnh của cây (dữ liệu đảm bảo $n - 1$ cạnh tạo thành một cây).
- $q$ dòng tiếp theo, mỗi dòng là một thao tác dạng
1 u v choặc2 u v($1 \le u, v \le n$, $1 \le c \le 10^9$). Có ít nhất một thao tác loại 2.
Kết quả
Với mỗi thao tác loại 2, in kết quả trên một dòng.
Sample Input
6 5
1 1 2 2 1 3
1 2
1 3
2 4
2 5
3 6
2 4 6
1 5 1 2
2 4 6
2 5 5
2 4 3
Sample Output
4
2
1
1
Note
Đường đi $4 \to 2 \to 1 \to 3 \to 6$ có dãy màu 2 1 1 2 3 gồm $4$ đoạn màu. Sau khi tô màu $2$ cho đường đi $5 \to 2 \to 1$, dãy màu của đường đi $4 \to 6$ là 2 2 2 2 3, gồm $2$ đoạn.
Bình luận