Dây thừa
Xem dạng PDF📖 Bài giảng & lời giải: đây là Bài tập 4 trong bài giảng Bài 30: DSU và cây khung 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
Mạng có $n$ máy (đánh số từ 1 tới $n$). Kỹ thuật viên lần lượt cắm $m$ dây, dây thứ $i$ nối máy $u_i$ với máy $v_i$ (có thể $u_i = v_i$). Một dây được gọi là thừa nếu tại lúc cắm nó, hai đầu dây đã liên lạc được với nhau qua các dây cắm trước đó (một máy luôn liên lạc được với chính nó).
Hãy tìm các dây thừa.
Dữ liệu vào
- Dòng 1: hai số nguyên $n, m$ ($1 \le n \le 2 \cdot 10^5$, $0 \le m \le 2 \cdot 10^5$).
- $m$ dòng tiếp theo, dòng thứ $i$ gồm hai số nguyên $u_i, v_i$ ($1 \le u_i, v_i \le n$).
Kết quả
- Dòng 1: số dây thừa $k$.
- Nếu $k \gt 0$, dòng 2 in chỉ số (đánh số từ 1 theo thứ tự cắm) của các dây thừa theo thứ tự tăng dần, cách nhau một dấu cách.
Sample Input
5 6
1 2
2 3
3 1
4 5
5 4
1 4
Sample Output
2
3 5
Note
Dây 3 (nối 3 với 1) khép chu trình 1 – 2 – 3; dây 5 (nối 5 với 4) trùng với dây 4.
Bình luận