JOI 2011 - Report
Xem PDFỦy ban Olympic Tin học Nhật Bản là một tổ chức rất coi trọng việc báo cáo, liên lạc và trao đổi. Ủy ban có \(N\) người; mỗi người có đúng một người được chỉ định làm người nhận báo cáo của mình.
Ủy ban sắp triển khai một dự án gồm \(N\) công việc, được đánh số từ \(1\) đến \(N\). Mỗi người được giao phụ trách một công việc khác nhau. Các công việc được thực hiện lần lượt theo thứ tự từ công việc \(1\) đến công việc \(N\).
Khi hoàn thành công việc, người phụ trách gửi một báo cáo công việc cho người nhận báo cáo của mình. Người nhận được báo cáo tiếp tục chuyển chính báo cáo đó đến người nhận báo cáo của họ. Tuy nhiên, nếu một người đã từng chuyển báo cáo về công việc đó thì người ấy không chuyển lại báo cáo đó nữa. Quá trình này được lặp lại, nhờ đó một số người trong ủy ban nhận được báo cáo. Chỉ sau khi tất cả việc chuyển báo cáo của công việc trước kết thúc, công việc tiếp theo mới được thực hiện.
Yêu cầu
Cho biết người nhận báo cáo của người phụ trách từng công việc. Với mỗi người, hãy tính số loại báo cáo công việc khác nhau mà người đó đã nhận được tại thời điểm bắt đầu thực hiện công việc của mình.
Dữ liệu vào
Đọc từ đầu vào chuẩn:
- Dòng đầu chứa số nguyên \(N\), là số người trong ủy ban.
- Trong \(N\) dòng tiếp theo, dòng thứ \(i+1\) \((1\le i\le N)\) chứa số nguyên \(A_i\). Người nhận báo cáo của người phụ trách công việc \(i\) là người phụ trách công việc \(A_i\).
Dữ liệu ra
In ra \(N\) dòng. Dòng thứ \(i\) \((1\le i\le N)\) chứa một số nguyên là số loại báo cáo công việc khác nhau mà người phụ trách công việc \(i\) đã nhận được khi bắt đầu công việc của mình.
Ràng buộc
- \(2\le N\le100\,000\).
- \(1\le A_i\le N\) và \(A_i\ne i\) với mọi \(1\le i\le N\).
Thông tin kỹ thuật
Giới hạn của kỳ thi gốc: thời gian CPU \(0{,}5\) giây, bộ nhớ \(64\) MB.
Theo thông tin kỹ thuật của kỳ thi gốc, chương trình phải kết thúc bình thường với mã trả về \(0\). Một bộ dữ liệu chỉ được tính điểm khi chương trình đáp ứng giới hạn thời gian, bộ nhớ và cho kết quả đúng. Giới hạn ngăn xếp mặc định là \(8\) MB; cần tránh tràn ngăn xếp khi dùng đệ quy.
Khi cần xử lý số nguyên không vừa kiểu \(32\) bit, hãy dùng kiểu số nguyên \(64\) bit, chẳng hạn long long trong C/C++, với định dạng %lld cho scanf và printf. Với lượng dữ liệu vào/ra lớn, tài liệu kỹ thuật khuyến nghị dùng scanf/printf thay cho cin/cout để tránh chi phí vào/ra quá lớn.
Phân nhóm
Bài có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.
- Các bộ dữ liệu chiếm \(10\%\) tổng số điểm thỏa mãn \(N\le1\,000\).
Ví dụ
Ví dụ 1
Input
6
3
4
2
6
3
2
Output
0
1
1
3
0
5
Giải thích
Trong mô tả sau, người \(i\) là người phụ trách công việc \(i\). Mỗi mũi tên biểu diễn một lần chuyển báo cáo giữa hai người liên tiếp; toàn bộ chuỗi chuyển báo cáo kết thúc trước khi công việc kế tiếp bắt đầu.
- Người \(1\) bắt đầu công việc \(1\), khi đó đã nhận \(0\) loại báo cáo. Báo cáo công việc \(1\) lần lượt được chuyển theo chuỗi \(1\to3\to2\to4\to6\to2\).
- Người \(2\) bắt đầu công việc \(2\), khi đó đã nhận \(1\) loại báo cáo, về công việc \(1\). Báo cáo công việc \(2\) lần lượt được chuyển theo chuỗi \(2\to4\to6\to2\).
- Người \(3\) bắt đầu công việc \(3\), khi đó đã nhận \(1\) loại báo cáo, về công việc \(1\). Báo cáo công việc \(3\) lần lượt được chuyển theo chuỗi \(3\to2\to4\to6\to2\).
- Người \(4\) bắt đầu công việc \(4\), khi đó đã nhận \(3\) loại báo cáo, về các công việc \(1,2,3\). Báo cáo công việc \(4\) lần lượt được chuyển theo chuỗi \(4\to6\to2\to4\).
- Người \(5\) bắt đầu công việc \(5\), khi đó đã nhận \(0\) loại báo cáo. Báo cáo công việc \(5\) lần lượt được chuyển theo chuỗi \(5\to3\to2\to4\to6\to2\).
- Người \(6\) bắt đầu công việc \(6\), khi đó đã nhận \(5\) loại báo cáo, về các công việc \(1,2,3,4,5\). Báo cáo công việc \(6\) lần lượt được chuyển theo chuỗi \(6\to2\to4\to6\).
Kỳ thi:
- JOI 2011 Representative Selection - Ngày 3 (11 Tháng 1., 2016)
Bình luận