1. 题意:
- 给n个任务 1~k;
- 以及 task dependency array A、B;其中 [Ai,Bi] - bi先完成,才能做ai;
- 同时规定:每个task顶多只能依赖一个task
- 问:最多可以完成的任务数
2. 分析
虽然任务的dependency可能成环(1-2-3-4-1),但有第三条可知:
每个任务最多出现在1个“环”里,表明该“环”上的任务有一个不可能完成,但可以完成(环任务数-1)的任务
对于没有出现在环中的任务,这些任务都能够执行完
因此,相当于根据 A、B,找 number of dependency cycle,
那么最多可以完成的任务数就是:总任务数 - 环数
3. Union Find Class
Union Find Summary: https://workflowy.com/s/HdnT.nwWuWS1F7W
如何找有多少环?:Union-Find.isConnected()
- 对每个 task dependency 进行 union
- union 之前调用 isConnected() 检查是否已连通(表明该[ai,bi]会导致“环”)
- 累加 每次isConnected() 结果为 True 的情况
- isConnected() 有几次为 True,就存在几个“环”
1 |
|
4. Solution
1 | class TaskMaster{ |