Suppose we want team A to win.
Clearly it is best if A wins all of its matches, so this gives us a target score. We can now compute the number of losses that each other team must suffer in order for A to win overall.
The problem is that we can only get at most 1 loser from each of the remaining games. So we need to work out how to match teams to games, where each match corresponds to a particular team losing in a particular game.
This is basically matching on a bipartite graph between teams and games, but we can also solve it with maximum flow via an extra source and sink node.
- Make a source node to each team with capacity equal to the number of losses that team must have.
- Make an edge from each team to each remaining game involving that team (with infinite capacity)
- Make an edge from each remaining game to the sink node with capacity equal to the number of times that game is to be played. (i.e. if both B vs C games are still to be played, the capacity is 2)
Then if you can construct a valid flow from source to sink that reaches the capacity (on each of the source to team edges) you have proved that it is still possible for team A to win.