Cs50 Tideman — Solution

Every year, the village of Coderidge held an election for the Keeper of the Orchard. Unlike other villages, they used a complex ranked voting system designed by a long-dead mathematician named Tideman. The rule was simple: if there was a way to trace a circle of preference (A beats B, B beats C, C beats A), that circle was a paradox, and the weakest link in that circle must be ignored.

"Yes," Maya sighed. "I sort the pairs. Strongest first. Alice over Bob? Lock it. Bob over Charlie? Lock it. Charlie over Alice? Don't lock it because it creates a cycle. But my cycle detection is wrong."

"Show me your cycle detection," Kai said. Cs50 Tideman Solution

Her friend, an old sysadmin named Kai, peered over her shoulder. "You're trying to lock every pair in order of strength, right?"

In a directed graph, adding an edge from A → B creates a cycle if and only if B can already reach A. Every year, the village of Coderidge held an

The story is useful because the narrative (the cycle, the DFS, the "path back") sticks in your brain longer than any pseudocode. Next time you face Tideman, remember Maya and the Orchard.

Maya was the new programmer tasked with tabulating the votes. She had the first part down: counting each ballot to build a 2D array of preferences . It told her that Alice beat Bob (5 votes to 2), Bob beat Charlie (4 to 3), and Charlie beat Alice (3 to 2). A perfect, frustrating cycle. "Yes," Maya sighed

"It's not about the edge you're adding," she whispered. "It's about the path that already exists beneath it."