 Imagine a large organization. For example, the employees at a large company that are considering forming a union. Each person might belong to one or more constituencies. For example, a person might be a warehouse worker and a driver. And this leads to a key problem. Can we form a representative group consisting of one person from each constituency? This problem is actually easy to solve, but there's a problem of conflict of interest. For example, a person who represents the warehouse workers and drivers might favor the interest of the drivers over those of the warehouse workers. It would be best if each person represented only one group. This would give us a system of distinct representatives, SDR for short, where every group is represented by one person, and no person represents more than one group. If only there was a mathematical tool we could use to solve this. Wait a minute. That's a graph theory problem. Remember, a graph represents relationships between objects. So if we want to produce a graph representing this situation, we note that every person is related to every group they are in. This suggests we want a graph with vertices x corresponding to the different constituencies, degrees y corresponding to the different employees, and edges joining employees to all constituencies they belong to. Since no vertex will join a constituency to another constituency or an employee to another employee, this is a bipartite graph on x and y, and finding a system of distinct representatives corresponds to solving a matching problem. To make the matching, we'll use Kuhn's algorithm for unweighted graphs. We'll match the lowest numbered unsaturated vertex to the lowest numbered vertex. If this is not an edge in our matching, include it. If this is an edge, go to the other end and lather rinse repeat until you produce a m-augmented path, or upon switch the edges to expand our matching, or you determine no m-augmented path exists. So back up a step and choose the next vertex. Remember this is a depth-first search. And in all cases, lather rinse repeat. For example, suppose a group of eight people, which will number from one to eight, form five separate constituencies. We want to find a committee consisting of one person from each constituency so that no person represents more than one constituency. So we'll form a bipartite graph with vertices corresponding to the groups, a through e, and to the people, one through eight. And then we'll draw an edge between a person and a constituency if the person is in the constituency. So group a has members one, two, three, five, and eight, so we join a to these vertices. b has members two, four, and six, so we join b to those vertices. And likewise for the other groups, which produces our graph. So we'll take our lowest numbered vertex, a, and we'll join it to its lowest-numbered neighbor, that's one, so a-one is our first edge. Next, b has lowest-numbered neighbor two, so b-two is our second edge. b has lowest-numbered neighbor two, which begins an edge in our matching. So we'll follow that edge to b, and then from b, the lowest-numbered edge not yet included is four. So we find c-two, two b, b-four is a m-augmented path, so we switch out b-two for c-two and b-four. Our next vertex is d, and to the lowest-numbered neighbor, d-three is not yet included in our matching, and so we include it. From e, we go to the lowest-numbered neighbor one, which follows a matching edge, one a, then to the lowest-numbered neighbor two, to the next matching edge, two c, then from c to the lowest-numbered vertex not included, which is going to be five. So e-one, one a, a-two, two c, c-five is a m-augmented path, and we switch the edges in our matching. Since we can find at most five edges in a matching, because that's the number of groups that we have, this gives us our maximal matching, and this in turn gives us our representatives for group a, person two, for group b, person four, for group c, person five, for group d, person three, and for group e, person one.