The Allianz customer portal consists of services that depend on other services. A directed edge A -> B means service A requires service B. Implement a function that determines whether the dependency graph contains a circular dependency.
A cycle exists if, starting from any service, following dependency edges can eventually return to that service. The graph may contain disconnected components and services with no dependencies.
Implement detect_cycle(graph), where graph is a dictionary mapping each service name to a list of services it directly depends on. Every dependency name appears as a key in graph, even if its list is empty. Return True if the directed graph contains at least one cycle, otherwise return False.
def detect_cycle(graph):