Cho đồ thị giao (interference graph) gồm n đỉnh 1,…,n (đại diện biến/temporary) và m cạnh vô hướng (hai biến sống đồng thời, không thể chung thanh ghi). Cho k là số thanh ghi (màu) khả dụng. Mô phỏng thuật toán cấp phát thanh ghi kiểu Chaitin (simplify + spill, tô màu lạc quan) với các quy tắc CHÍNH XÁC sau (để đảm bảo kết quả đơn định):
Giai đoạn 1 — Simplify/Spill (xây ngăn xếp): Lặp lại trên đồ thị hiện tại (loại dần các đỉnh đã đẩy vào ngăn xếp cùng cạnh của chúng) cho đến khi rỗng:
Giai đoạn 2 — Select (gán màu, pop theo LIFO): Lấy lần lượt từng đỉnh ra khỏi ngăn xếp (đỉnh đẩy vào SAU CÙNG được xử lý TRƯỚC). Với đỉnh v: xét các láng giềng của v trong đồ thị GỐC đã được xử lý trước đó (đã có màu, không phải SPILL); chọn màu nhỏ nhất trong {1,…,k} chưa bị láng giềng nào dùng. Nếu có màu như vậy: gán màu đó. Nếu không còn màu trống: đỉnh này TRÀN (SPILL).
In ra n dòng theo thứ tự đỉnh 1,…,n: số màu (1..k) được gán, hoặc SPILL nếu tràn.
Input:
3 3 2
1 2
1 3
2 3
(tam giác 3 đỉnh, chỉ có 2 màu — không đủ tô đúng, phải tràn 1 đỉnh)
Output:
SPILL
2
1
Dòng đầu: 3 số nguyên n,m,k (1≤n≤300, 0≤m≤20000, 1≤k≤n). m dòng tiếp theo "u v" (1≤u,v≤n, u=v) là cạnh vô hướng (không có cạnh lặp).
In n dòng theo thứ tự đỉnh 1,…,n: số màu (1..k) hoặc SPILL.
Ví dụ:
Đầu vào:
1 0 1
Đầu ra:
1
Đầu vào:
3 3 2
1 2
1 3
2 3
Đầu ra:
SPILL
2
1
Đang tải editor...