File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Time: O(n^3)
2
+ # Space: O(n^2)
3
+
4
+ class Solution (object ):
5
+ def checkIfPrerequisite (self , n , prerequisites , queries ):
6
+ """
7
+ :type n: int
8
+ :type prerequisites: List[List[int]]
9
+ :type queries: List[List[int]]
10
+ :rtype: List[bool]
11
+ """
12
+ def floydWarshall (n , graph ):
13
+ reachable = set (map (lambda x : x [0 ]* n + x [1 ], graph ))
14
+ for k in xrange (n ):
15
+ for i in xrange (n ):
16
+ for j in xrange (n ):
17
+ if i * n + j not in reachable and (i * n + k in reachable and k * n + j in reachable ):
18
+ reachable .add (i * n + j )
19
+ return reachable
20
+
21
+ reachable = floydWarshall (n , prerequisites )
22
+ return [i * n + j in reachable for i , j in queries ]
23
+
24
+
25
+ # Time: O(n * q)
26
+ # Space: O(p + n)
27
+ import collections
28
+
29
+
30
+ class Solution2 (object ):
31
+ def checkIfPrerequisite (self , n , prerequisites , queries ):
32
+ """
33
+ :type n: int
34
+ :type prerequisites: List[List[int]]
35
+ :type queries: List[List[int]]
36
+ :rtyp
37
+ """
38
+ graph = collections .defaultdict (list )
39
+ for u , v in prerequisites :
40
+ graph [u ].append (v )
41
+ result = []
42
+ for i , j in queries :
43
+ stk , lookup = [i ], set ([i ])
44
+ while stk :
45
+ node = stk .pop ()
46
+ for nei in graph [node ]:
47
+ if nei in lookup :
48
+ continue
49
+ stk .append (nei )
50
+ lookup .add (nei )
51
+ result .append (j in lookup )
52
+ return result
You can’t perform that action at this time.
0 commit comments