expression evaluation and heap
union and find