Họa Hóc

Xem dạng PDF

Gửi bài giải

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

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

NKN99 là một học sinh đang học về môn hóa. Trong môn hóa, bạn đang học về liên kết ion, liên kết cộng hóa trị và liên hết hydro. Để dễ hình dung thì bạn được giáo viên cho phát một mô hình nguyên tử của các chất. Chất bạn đang có trên tay gồm ~N~ nguyên tử và ~M~ liên kết. Bạn ấy khá phá nên bạn ấy muốn bỏ nhiều liên kết nhất để mô hình còn đủ ~N~ phân tử hóa học liên kết với nhau. Dù vậy, mỗi liên kết có một độ khó để loại bỏ khác nhau. Dù vậy, cũng như khá lười, tổng độ khó các cạnh bạn ấy loại bỏ không được quá ~S~. Bạn hãy giúp bạn NKN99 phá mô hình của giáo viên nhé.

Input

  • Dòng đầu gồm 3 số ~N,M,S(1\le N\le50000,1\le M\le 100000,1\le S\le10^{18})~

  • ~M~ dòng tiếp theo, mỗi dòng gồm ~3~ số là ~U,V,C~ có nghĩa là có liên kết giữa nguyên tử ~U~ và nguyên tử ~V~ với độ khó để loại bỏ là ~C(1\le C\le10^9)~. Mô hình đảm bảo không có hai liên kết nào cùng nối vào một cặp nguyên tố giống nhau và các liên kết ban đầu tạo thành một đồ thị liên thông.

Output

  • Dòng đầu gồm ~1~ số là số liên kết nhiều nhất có thể loại bỏ.

  • Dòng thứ hai gồm một vài số là chỉ số cạnh được loại bỏ theo thứ tự tăng dần.

  • Nếu có nhiều cách in ra cách bất kỳ.

Sample Input 1

6 7 10
1 2 3
1 3 3
2 3 3
3 4 1
4 5 5
5 6 4
4 6 5

Sample Output 1

2
1 6

Sample Input 2

6 10 20
4 3 4
2 4 2
1 4 3
6 3 2
5 1 5
5 2 3
3 5 2
4 6 4
6 5 3
6 2 4

Sample Output 2

5
2 3 4 6 7

Bình luận

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



  • 2
    minhkochamhoc  đã bình luận lúc 6, Tháng 10, 2025, 2:32 chỉnh sửa

    solve:

    tóm tắt đề :

    Cho đồ thị n đỉnh m cạnh và 1 số nguyên dương S , mỗi cạnh của đồ thị có trọng số c , ta cần xóa đi 1 vài cạnh của đồ thị sao cho sau khi xóa những cạnh này đồ thị vẫn còn liên thông và tổng trọng số của những cạnh bị xóa ko vượt quá S , số cạnh bị xóa là nhiều nhất có thể. yêu cầu : cho biết số lượng cạnh xóa được nhiều nhất và đó là những cạnh nào (theo thứ tự tăng dần) ?

    ý tưởng :

    • do yêu cầu phải xóa nhiều cạnh nhất và tổng trọng số ko vượt quá S , cho nên dễ thấy ta sẽ cố gắng càng chọn những cạnh có trọng số nhỏ càng tốt để xóa đc càng nhiều cạnh
    • vì sau xóa đồ thị phải liên thông mà để đồ thị n đỉnh liên thông ta cần ít nhất n - 1 cạnh để kết nối đồ thị này tạo thành cấu trúc cây , do đó ta ko thể cứ chọn những cạnh có trọng số nhỏ nhất rồi liên tục xóa nó đi cho đến khi nó chưa tràn S được vì có thể khi ta xóa như vậy vô tình ta đã xóa đi những cạnh cần giữ lại để đồ thị có tính liên thông .
    • từ đó dễ thấy ta bắt buộc phải giữ lại n-1 cạnh để đảm bảo đồ thị liên thông , vậy bây giờ câu hỏi đặt ra là ta sẽ chọn những cạnh như nào sao cho tối ưu nhất ? thì ta nhận xét rằng nếu chọn những cạnh có trọng số càng lớn thì ta sẽ càng để lại những cạnh có trọng số nhỏ làm quyền lựa chọn có thể xóa cho bài tập của ta , cho nên ta sử dụng thuật toán xây dựng CÂY KHUNG LỚN NHẤT để tìm những cạnh ko đc phép xóa .
    • sau đó ta duyệt lại những cạnh có thể xóa chọn những cạnh có trọng số nhỏ nhất và thêm nó vào danh sách những cạnh có thể xóa cho tới khi ko thể thêm được nữa và đó chính là kết quả của ta cho bài tập này .

    code của tớ : hehe

    hi vọng là cội nguồn sống của con người vì vậy chừng nào trận đấu chưa hết thúc đừng từ bỏ nó nhé🍀


  • 0
    NGUYENQUYETDINH  đã bình luận lúc 6, Tháng 9, 2025, 7:22




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

    đề làm khó e quá, đề kêu in chỉ số nhưng test thì in ra vị trí :(()