Hướng dẫn giải của Mofk Cup Round 2 - COWORKING


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Gọi ~c_t~ là số nhân viên làm việc ở khoảng thời gian ~t~. Nếu chúng ta có cách chia sao cho với mọi ~t~ thỏa mãn ~\lfloor\frac{c_t}{2}\rfloor~ số nhân viên nằm trong một nhóm, hiển nhiên đây là cách phân chia tối ưu. Ở đây sẽ trình bày một cách đạt được cách chia này.

Với mỗi nhân viên ~i~, thêm ~l_i,r_i+1~ vào một mảng ~v~. Sắp xếp mảng ~v~ tăng dần. Với mỗi ~0\le i\lt n~ thêm cạnh giữa ~2i~ và ~2i+1~ (các chỉ số được đánh số từ ~0~), đồng thời thêm cạnh giữa ~x~ và ~y~ với ~x~ và ~y~ là vị trí của ~l_i~ và ~r_i+1~ trong ~v~. Dễ thấy lúc này với mỗi ~0\le i\lt 2n~ ta có số cạnh ~u-v~ thỏa mãn ~u\le i\lt v~ là một số chẵn (bạn đọc tự chứng minh).

Lúc này nếu ta tìm chu trình Euler trên đồ thị vừa tạo thì ta sẽ tìm được cách chia bằng cách cho các cạnh xuôi vào một tập và cạnh ngược vào tập còn lại. Khi đó vì các cạnh ~2i- 2i+1~ không đè lên nhau lên với mỗi ~i~ ta có chênh lệch giữa số cạnh xuôi và ngược qua đoạn đó không vượt quá ~1~.


Bình luận

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


Không có bình luận tại thời điểm này.