Editorial for WC '17 Contest 3 S1 - Mutual Friends
Submitting an official solution before solving the problem yourself is a bannable offence.
Let  be the number of different possible friendships. There's one for each unordered pair of users, meaning that 
. 
 is small enough (only 
 when 
) that it's viable to consider each possible subset of these friendships. There are 
 such subsets, and we can consider all of them using depth-first search (recursion), or by iterating over all bitmasks from 
 to 
.
For each considered set of friendships, we can then compute its resulting grid of mutual friend counts by iterating over all  pairs of users 
, and counting the number of other users 
 such that the set of friendships includes both unordered pairs 
 and 
. This process takes 
 time. If the resulting grid of mutual friend counts exactly matches the required grid 
, then we've found a valid set of friendships, meaning that we can output it and stop the depth-first search. If we finish considering all 
 possible sets of friendships without coming across a valid one, then the answer must be 
Impossible.
The time complexity of the algorithm described above is .
Comments