Color query

Xem dạng PDF

Gửi bài giải

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

Người đăng:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho một đồ thị vô hướng có ~n~ đỉnh, đỉnh thứ ~i~ có màu ~a_i~. Ban đầu đồ thị chưa có cạnh nào.

Cho ~q~ truy vấn, mỗi truy vấn thuộc một trong hai dạng sau:

  • ~1\ u\ v~: Thêm một cạnh nối giữa ~u~ và ~v~.
  • ~2\ u\ c~: Tính số đỉnh có màu ~c~ trong thành phần liên thông chứa ~u~.

Input format

Dòng đầu tiên chứa hai số nguyên dương ~n~ và ~q~ (~n\le 100000~; ~q \le 200000~).

Dòng tiếp theo chứa ~n~ số nguyên dương ~a_1, a_2, \ldots, a_n~ (~a_i \le n~).

~q~ dòng cuối cùng, mỗi dòng gồm ba số nguyên dương, số nguyên đầu tiên là loại của truy vấn (~1~ hoặc ~2~), hai số nguyên còn lại không vượt quá ~n~.

Output format

Với mỗi truy vấn loại ~2~, in ra trên một dòng kết quả của truy vấn đó.

Sample

Input
5 7
2 4 2 3 2
1 1 2
2 1 2
1 3 5
2 2 1
1 1 3
2 3 2
2 4 3
Output
1
0
3
1

Bình luận

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



  • 7
    dangminh  đã bình luận lúc 4, Tháng 11, 2024, 14:10

    tui gửi mn solution ac bài này

    • sử dụng DSU để xử lý query 1

      • cài đặt dsu như bình thường CODE:

        if(rootu!=rootv){

        if(dept[rootu]>dept[rootv]) connect(rootu,rootv);

        else if(dept[rootu]<dept[rootv]) connect(rootv,rootu);

        else{

        connect(rootu,rootv);

        dept[rootu]++;

        }

        }

      • nối hai đỉnh và cộng hết màu của một đỉnh vào đỉnh còn lại làm gốc

      • CODE hàm connect:

        R[child]=root;

        for(auto [x,cnt]: color[child]) color[root][x]+=cnt;

        color[child].clear();

      • cách tìm gốc là sẽ gán u=gốc u cho đến khi u==gốc u

        while(R[u]!=u) u=R[u];

        return u;

    • kết hợp vector map hoặc vector unodered_map

    • query 2 chỉ cần cout ra color[đỉnh][màu]

    Full Code C++ của tui


  • -25
    trunn  đã bình luận lúc 16, Tháng 10, 2023, 2:21 sửa 2

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


  • -10
    quoctuan  đã bình luận lúc 14, Tháng 9, 2023, 8:56 sửa 2

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


  • -68
    trunn  đã bình luận lúc 2, Tháng 12, 2022, 2:18

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


    • -49
      themaver1cks  đã bình luận lúc 2, Tháng 12, 2022, 2:21 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.