|
15 | 15 |
|
16 | 16 | public class Contest {
|
17 | 17 |
|
18 |
| - public int minNumberOfSemesters(int n, int[][] dependencies, int k) { |
19 |
| - int[] indegree = new int[n + 1]; |
20 |
| - for (int[] prereq : dependencies) { |
21 |
| - indegree[prereq[1]]++; |
22 |
| - } |
23 |
| - Queue<Integer> zeroDegreeQueue = new LinkedList<>(); |
24 |
| - for (int i = 1; i <= n; i++) { |
25 |
| - if (indegree[i] == 0) { |
26 |
| - zeroDegreeQueue.add(i); |
27 |
| - } |
28 |
| - } |
29 |
| - Map<Integer, Set<Integer>> map = new HashMap<>(); |
30 |
| - for (int[] dep : dependencies) { |
31 |
| - if (!map.containsKey(dep[1])) { |
32 |
| - map.put(dep[1], new HashSet<>()); |
33 |
| - } |
34 |
| - map.get(dep[1]).add(dep[0]); |
35 |
| - } |
36 |
| - int semesterCount = 0; |
37 |
| - int coursesToTakeThisSemester = 0; |
38 |
| - while (!zeroDegreeQueue.isEmpty()) { |
39 |
| - int size = zeroDegreeQueue.size(); |
40 |
| - Set<Integer> removedAtThisLevel = new HashSet<>(); |
41 |
| - for (int i = 0; i < zeroDegreeQueue.size() && coursesToTakeThisSemester < k; i++) { |
42 |
| - int course = zeroDegreeQueue.poll(); |
43 |
| - removedAtThisLevel.add(course); |
44 |
| - coursesToTakeThisSemester++; |
45 |
| - for (int[] dep : dependencies) { |
46 |
| - if (dep[0] == course) { |
47 |
| - indegree[dep[1]]--; |
48 |
| - if (indegree[dep[1]] == 0) { |
49 |
| - zeroDegreeQueue.add(dep[1]); |
50 |
| - } |
51 |
| - } |
52 |
| - } |
53 |
| - if (coursesToTakeThisSemester >= k) { |
54 |
| - semesterCount++; |
55 |
| - coursesToTakeThisSemester = 0; |
56 |
| - break; |
57 |
| - } else if (i + 1 == size) { |
58 |
| - if (removedAtThisLevel.retainAll(map.get(zeroDegreeQueue.peek()))) { |
59 |
| - semesterCount++; |
60 |
| - coursesToTakeThisSemester = 0; |
61 |
| - break; |
62 |
| - } else { |
63 |
| - coursesToTakeThisSemester++; |
64 |
| - break; |
65 |
| - } |
66 |
| - } |
67 |
| - } |
68 |
| - removedAtThisLevel.clear(); |
69 |
| - } |
70 |
| - semesterCount += coursesToTakeThisSemester > 0 ? 1 : 0; |
71 |
| - return semesterCount; |
72 |
| - } |
73 |
| - |
74 | 18 | public static void main(String... args) {
|
75 |
| - System.out.println("Hello!"); |
76 |
| - Contest contest = new Contest(); |
77 |
| -// System.out.println(contest.minNumberOfSemesters(4, new int[][]{ |
78 |
| -// {2, 1}, |
79 |
| -// {3, 1}, |
80 |
| -// {1, 4} |
81 |
| -// }, 2));//3 |
82 |
| -// |
83 |
| -// System.out.println(contest.minNumberOfSemesters(5, new int[][]{ |
84 |
| -// {2, 1}, |
85 |
| -// {3, 1}, |
86 |
| -// {4, 1}, |
87 |
| -// {1, 5} |
88 |
| -// }, 2));//4 |
89 |
| -// |
90 |
| -// System.out.println(contest.minNumberOfSemesters(4, new int[][]{ |
91 |
| -// {2, 1}, |
92 |
| -// {4, 3}, |
93 |
| -// {1, 3}, |
94 |
| -// {2, 3} |
95 |
| -// }, 4));//3 |
96 |
| -// |
97 |
| -// System.out.println(contest.minNumberOfSemesters(8, new int[][]{ |
98 |
| -// {1, 6}, |
99 |
| -// {2, 7}, |
100 |
| -// {8, 7}, |
101 |
| -// {2, 5}, |
102 |
| -// {3, 4} |
103 |
| -// }, 3));//3 |
104 |
| - |
105 |
| -// System.out.println(contest.minNumberOfSemesters(9, new int[][]{ |
106 |
| -// {4, 8}, |
107 |
| -// {3, 6}, |
108 |
| -// {6, 8}, |
109 |
| -// {7, 6}, |
110 |
| -// {4, 2}, |
111 |
| -// {4, 1}, |
112 |
| -// {4, 7}, |
113 |
| -// {3, 7}, |
114 |
| -// {5, 2}, |
115 |
| -// {5, 9}, |
116 |
| -// {3, 4}, |
117 |
| -// {6, 9}, |
118 |
| -// {5, 7}, |
119 |
| -// }, 2));//5 |
120 |
| - |
121 |
| -// Set<Coord> visited = new HashSet<>(); |
122 |
| -// visited.add(new Coord(0, 0)); |
123 |
| -// System.out.println(visited.contains(new Coord(0, 0))); |
124 |
| -//// System.out.println(contest.isPathCrossing("NES")); |
125 |
| -// System.out.println(contest.isPathCrossing("NSSEN")); |
126 |
| -// System.out.println(contest.canArrange(new int[]{1, 2, 3, 4, 5, 10, 6, 7, 8, 9}, 5)); |
127 |
| - |
128 |
| -// System.out.println(contest.getLastMoment(4, new int[]{4, 3}, new int[]{0, 1})); |
129 |
| -// System.out.println(contest.getLastMoment(7, new int[]{0,1,2,3,4,5,6,7}, new int[]{}));//7, correct |
130 |
| - System.out.println("Finished!"); |
| 19 | + System.out.println("Finished."); |
131 | 20 | }
|
132 | 21 |
|
133 | 22 | }
|
|
0 commit comments