Một hệ thống gồm n trạm và m tuyến cáp hai chiều có thể được khôi phục. Mỗi tuyến nối hai trạm khác nhau và có một chi phí khôi phục. Hãy chọn một số tuyến sao cho sau khi khôi phục, mọi cặp trạm đều liên lạc được với nhau và tổng chi phí là nhỏ nhất.
Nếu không tồn tại cách kết nối toàn bộ hệ thống, hãy in IMPOSSIBLE.
Input
Dòng đầu chứa hai số nguyên n và m - số trạm và số tuyến cáp có thể khôi phục.
Mỗi dòng trong m dòng tiếp theo chứa ba số nguyên u,v,c, mô tả một tuyến nối trạm u với trạm v có chi phí c.
Output
In tổng chi phí nhỏ nhất để kết nối toàn bộ n trạm. Nếu không thể thực hiện, in IMPOSSIBLE.
Constraints
1≤n≤105.
0≤m≤2⋅105.
1≤u,v≤n,u=v.
1≤c≤109.
Không có hai tuyến cùng nối một cặp trạm.
Đáp án có thể vượt giới hạn số nguyên 32 bit.
Scoring
Subtask 1 (50% số điểm): n≤9,m≤14.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
4 5
1 2 4
1 3 9
2 3 2
2 4 7
3 4 3
Output
9
Giải thích: Chọn các tuyến 2-3, 3-4 và 1-2 với tổng chi phí 2+3+4=9; ba tuyến này kết nối cả bốn trạm.
Lời giải tóm tắt
Phân tích: Mỗi phương án hợp lệ cần nối tất cả n trạm nhưng không cần giữ chu trình: bỏ một cạnh khỏi chu trình vẫn duy trì liên thông và chỉ làm chi phí giảm hoặc không tăng. Vì vậy ta cần một cây khung có tổng trọng số nhỏ nhất.
Thuật toán: Sắp xếp các tuyến theo chi phí tăng dần. Duyệt theo thứ tự đó và dùng DSU để biết hai đầu tuyến đang thuộc hai thành phần khác nhau hay không. Chỉ nhận tuyến nối hai thành phần, cộng chi phí và hợp nhất chúng. Cuối cùng, nếu đã nhận đúng n-1 tuyến thì in tổng; nếu chưa đủ thì in IMPOSSIBLE.
Chứng minh: Ở mỗi bước, cạnh được nhận là cạnh nhẹ nhất nối qua một lát cắt giữa hai thành phần hiện tại. Theo tính chất lát cắt, có một cây khung nhỏ nhất chứa cạnh ấy. DSU ngăn mọi chu trình, nên sau n-1 lần nhận ta có một cây khung tối ưu. Nếu không thể nhận đủ n-1 cạnh thì đồ thị không có cây khung.