How to make possible to flag only one node
You're looking for the Flag trim action, which you can implement with Rules.

If you make a rule that is activated on the event "Node is flagged" with "Trim the flag" for the relevant user to "1", then the other flags will be cancelled and only the most recent flag will remain.