One max per team. Simple as that.
Can be subverted by someone taking a contract in the amount of a max deal less one dollar.
I think if you want superstars to gravitate away from one another and increase league parity, you introduce a "super max": Each team has one super max and his amount does not count towards the cap. There is also no limit on how much a team can offer their super max. For example, if a team wants to spend $100 million/year on a player, they can do it. But only one player on each team can get a super max contract.
This is a sure-fire way to prevent super teams. No way Durant joins Curry under this scenario.
An alternative approach: Copy the NFL's salary cap, including franchise tag designation, while keeping the union happy with guaranteed contracts. I would change the franchise tag, though: Allow any team to sign away a franchise tag, but if they do so they have to forfeit their next three first-round picks to the team that loses their franchise player.