Union-Find算法小结

对Union Find算法不熟悉,可参看
http://blog.csdn.net/dm_vincent/article/details/7655764

http://blog.csdn.net/dm_vincent/article/details/7769159

个人觉得该博文阐述非常通俗易懂,第二个链接是博主举的几个应用例子。

 

几个需要思考的问题:

这种算法通常应用于什么场景?怎么用?

如何将问题归约到union-find或者说union的目的是什么?

怎么union,即两个元素满足什么条件时可以union?

>>两个元素有关联

题目

union 什么

union目的

Graph Valid Tree

一条边的两个顶点

若union两个顶点时发现根一样,说明已经在同一棵树中,说明输入graph存在环,非tree;union结束后,计数有多少个不同的根,当且仅当存在一个根时事vaild tree

Subtree Sum

节点同其父节点

将以指定id节点为根的所有节点union在一起,对这个union中的元素值求和

Number of Islands

两个相邻的1元素

union后计数union集合数量(通过计数union数组中根节点数量)

Surrounded Regions

所有从边界可达的O元素union在一起

union完成后那些没有在边界可达O集合中的O是需要翻转的

 

 

 https://leetcode.com/problems/surrounded-regions/

此题debug了很久,一个20*20的case 总是通不过,原因是oRoot的rank值设置得不够大,

会被矩阵中的其他元素超过从而oRoot不再是oRoot导致整个矩阵的O将全部被改为X。

 

posted @ 2015-09-24 09:45  abcxyz00  阅读(1023)  评论(0编辑  收藏  举报