An Efficient Distributed Algorithm for Generating and Updating Multicast Trees