## Algorithm

Problem Name: 851. Loud and Rich

There is a group of `n` people labeled from `0` to `n - 1` where each person has a different amount of money and a different level of quietness.

You are given an array `richer` where `richer[i] = [ai, bi]` indicates that `ai` has more money than `bi` and an integer array `quiet` where `quiet[i]` is the quietness of the `ith` person. All the given data in richer are logically correct (i.e., the data will not lead you to a situation where `x` is richer than `y` and `y` is richer than `x` at the same time).

Return an integer array `answer` where `answer[x] = y` if `y` is the least quiet person (that is, the person `y` with the smallest value of `quiet[y]`) among all people who definitely have equal to or more money than the person `x`.

Example 1:

```Input: richer = [[1,0],[2,1],[3,1],[3,7],[4,3],[5,3],[6,3]], quiet = [3,2,5,4,6,1,7,0]
Output: [5,5,2,5,4,5,6,7]
Explanation:
Person 5 has more money than 3, which has more money than 1, which has more money than 0.
The only person who is quieter (has lower quiet[x]) is person 7, but it is not clear if they have more money than person 0.
Among all people that definitely have equal to or more money than person 7 (which could be persons 3, 4, 5, 6, or 7), the person who is the quietest (has lower quiet[x]) is person 7.
The other answers can be filled out with similar reasoning.
```

Example 2:

```Input: richer = [], quiet = 
Output: 
```

Constraints:

• `n == quiet.length`
• `1 <= n <= 500`
• `0 <= quiet[i] < n`
• All the values of `quiet` are unique.
• `0 <= richer.length <= n * (n - 1) / 2`
• `0 <= ai, bi < n`
• `ai != bi`
• All the pairs of `richer` are unique.
• The observations in `richer` are all logically consistent.

## Code Examples

### #1 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def loudAndRich(self, richer, quiet):
edges, memo, res = collections.defaultdict(list), {}, [i for i in range(len(quiet))]
for r, p in richer: edges[p].append(r)
def explore(i):
if i in memo: return memo[i]
cur_min = i
for v in edges[i]:
cur = explore(v)
if quiet[cur] < quiet[cur_min]: cur_min = cur
res[i] = memo[i] = cur_min
return cur_min
for i in range(len(quiet)): explore(i)
return res
``````
Copy The Code &

Input

cmd
richer = [[1,0],[2,1],[3,1],[3,7],[4,3],[5,3],[6,3]], quiet = [3,2,5,4,6,1,7,0]

Output

cmd
[5,5,2,5,4,5,6,7]