USACO 2019 - Dec - Gold - Milk Visits

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Người đăng:
Nguồn bài:
http://www.usaco.org/index.php?page=viewproblem2&cpid=970
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Nông dân John đang định xây ~N~ trang trại được nối bởi ~N - 1~ con đường, tạo thành một đồ thị cây (mọi trang trại tới được nhau, và không tồn tại chu trình). Trang trại ~i~ có một loại bò là ~T_{i}~.

Nông dân John có ~M~ người bạn thường đến thăm anh ấy. Trong chuyến thăm của người bạn thứ ~i~, nông dân John sẽ cùng bạn mình đi trên các con đường từ trang trại ~A_{i}~ đến trang trại ~B_{i}~ (có thể ~A_{i} = B_{i}~). Hơn nữa, họ có thể uống sữa của bất kì con bò nằm trên các trang trại dọc đường đi từ trang trại ~A_{i}~ đến trang trại ~B_{i}~. Tuy nhiên, bạn của nông dân John chỉ thích uống sữa từ một loại bò nhất định. Các bạn của nông dân John sẽ chỉ được thỏa mãn nếu như họ có thể uống sữa từ loại bò họ thích.

Hãy xác định liệu bạn của John có được thỏa mãn sau chuyến thăm.

Input

  • Dòng đầu tiên chứa hai số nguyên dương ~N~, ~M~ ~(1 \le N, M \le 10^5)~.

  • Dòng thứ hai chứa ~N~ số nguyên ~T_{1},T_{2},...,T_{N}~ là loại bò của mỗi trang trại ~(1 \le T_{i} \le N)~.

  • ~N - 1~ dòng tiếp theo chứa 2 số nguyên ~X~ và ~Y~ phân biệt ~(1 \le X, Y \le N)~ thể hiện tồn tại 1 con đường nối trang trại ~X~ và ~Y~.

  • ~M~ dòng tiếp theo, dòng thứ ~i~ chứa các số nguyên ~A_{i}, B_{i}~ và ~C_{i}~. Trong đó ~A_{i}~ và ~B_{i}~ là hai đầu chuyến thăm của người bạn thứ ~i~, ~C_{i}~ là loại bò mà người bạn thứ ~i~ thích ~(1 \le A_{i}, B_{i}, C_{i} \le N)~.

Output

  • In ra xâu nhị phân có độ dài ~M~. Kí tự thứ ~i~ của xâu là ~1~ nếu người bạn thứ ~i~ được thỏa mãn, và ~0~ nếu ngược lại.

Sample Input 1

5 5
1 1 2 1 2
1 2
2 3
2 4
1 5
1 4 1
1 4 2
1 3 2
1 3 1
5 5 1

Sample Output 1

10110

Sample Input 2

6 4
1 2 3 3 3 3
1 2
2 3
3 4
2 5
5 6
4 6 1
4 6 2
4 6 3
4 6 4

Sample Output 2

0110

Giới hạn

  • Test 1-2 chính là test ví dụ.
  • Test 3 có ~N \le 10^3, M \le 2*10^3~.
  • Các tests 4-7 có ~C_{i} \le 10~.
  • Các test còn lại có giới hạn gốc.

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • -3
    vuongbankien012  đã bình luận lúc 23, Tháng 12, 2025, 12:36

    https://oj.vnoi.info/problem/vrdstcoloronpath bài tương tự


  • 11
    YougiTuber  đã bình luận lúc 11, Tháng 5, 2025, 2:14

    Spoil thuật⚠️

    Có thể không dùng HLD

    LCA + EulerTour + SegmentTree

    Nhận xét ~1~ (Xử lý truy vấn)

    Phải xử lý các truy vấn theo màu

    Xử lý các đỉnh màu ~c~ và các truy vấn liên quan đến màu ~c~ cùng một lượt, tăng các đỉnh ~u~ có ~c[u] = c~ lên ~1~, và ~-1~ sau khi xử lý xong.

    Nhận xét ~2~ (Kiếm tra đường đi)

    Muốn kiểm tra đường đi từ ~u~ đến ~v~ có màu ~c~ không, thì trong quá trình xử lý màu ~c~, cần kiểm tra tổng đường đi từ ~u~ đến ~v~ có khác ~0~ hay không, đây là một bài toán ứng dụng lca cơ bản

    $$sum(u, v) = dp[u] + dp[v] - 2dp[lca(u, v)] + (T[lca(u, v)] == c)$$

    Nhận xét ~3~ (Cách cập nhật)

    Bài toán trở thành: Thay đổi giá trị một đỉnh, và tính tổng đường đi từ gốc đến một đỉnh ~u~ nào đó

    Tương tự bài CSES - Path Query

    Khi thay đổi một đỉnh ~u~ lên ~1~, thì đường đi từ gốc đến các đỉnh ~v~ nằm trong cây con gốc ~u~ sẽ được tăng lên ~1~

    Ta cần cộng tất cả các đỉnh từ in[u] đến out[u] lên ~1~ bằng Fenwick Tree hoặc Segment Tree

    Độ phức tạp

    ~O((n+m)log(n))~


  • 1
    sitingfake  đã bình luận lúc 5, Tháng 2, 2025, 3:50

    orzz


  • -13
    JELLY1010  đã bình luận lúc 1, Tháng 10, 2023, 12:55 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.