需要面试准备
把一个 DAG 形式的 task 集合调度到 K 个独立的 worker slot 上并发执行。请实现 solution(tasks: list[dict], n_workers: int) -> dict,模拟 list-scheduling:每个调度时刻找出依赖都完成的 task,按 task_id 字典序分配给最低 index 的空闲 worker,每个 task 跑 duration ticks,结束后释放 worker。返回 per-worker timeline(每个 worker 一个 {task_id, start_time, end_time} 列表,按 start_time 升序)以及 total_makespan(所有 worker 中最晚的 end_time)。