Write a function to solve a specific algorithm or data structure problem.
Implement find_shortest_paths(n, edges, source) for a directed weighted graph. Return the shortest distance from source to every vertex, using None for unreachable vertices; return None if a negative-weight cycle is reachable from source. edges contains [from_vertex, to_vertex, weight] records, and the result is a list indexed by vertex.
def find_shortest_paths(n, edges, source):