并查集
弱者
爱猫忍者
展开
-
第一道并查集 值得纪念 很水的通畅工程 赤裸裸的并查集
这个题目的主要思想是每次输入一条边,判断这两个顶点的关系,然后修改其祖先节点的信息。 感觉并查集有点死,似乎基本的思路不变,就是修改祖先的时候可能有些小的变化,以后的文章会有体现。这个确实很普通。 #include int father[1000]; int find_ant(int a) { int r=a; while(father[r]!=r) r=father[r]; ret原创 2013-04-24 16:08:04 · 673 阅读 · 0 评论 -
hdu 1198 Farm Irrigation
简单并查集。这个题目就是找最少挖多少口井。让数据坑了一次,本来说是两个最大都是50,真坑啊,改成550就过了。 #include using namespace std; char map[550][550]; int father[150000]; int find_ant(int x) { if(x!=father[x]) father[x]=find_ant(father[x]);原创 2013-08-27 22:13:30 · 520 阅读 · 0 评论 -
poj 2492 A Bug's Life
种类并查集,直接按照食物链的套路下来就好了. #include #include using namespace std; int father[2005],relation[2005]; int flag; int find_ant(int x) { if(x!=father[x]) { int temp=father[x]; father[x]=find_an原创 2013-05-23 20:11:17 · 927 阅读 · 0 评论 -
poj 2236 wireless network
这个题目很明显是并查集的题目.题目的意思就是现在有n台电脑,然后告诉你这些电脑的坐标,并且当两台电脑的距离小于或者等于这个给定的d时,这两台电脑视为是连通的,现在的问题就是输入S a b然后问你a和b是不是连通的.这个题目的大体的做法和通常的并查集是一样的,查找祖先,合并节点.但是在合并的时候首先要求是这个电脑必须被修复过,也就是下面的visited数组对应的值是1,并且这个距离是小于或者等于d.原创 2013-05-23 19:08:01 · 1590 阅读 · 0 评论 -
POJ 1988 cube stacking
这个题目是并查集,题意就不分析了,比较简单关键一点是这个题目的C a;的意思是让你输出a下面有多少块砖。这个题出的挺好的,然后我就果断的超时超时,然后才悟到了其实可以多添加一个数组来记录并查集的过程中到底有多少个压在了这块砖上面,然后每次查找祖先以及合并祖先不同的节点修改一次(如果有必要,对应下面的find_ant函数),其实说白了这部分不是并查集,只是一个方法来记录到底有多少砖块在要求的砖块的下原创 2013-05-22 23:26:11 · 1391 阅读 · 0 评论 -
hdu 3172 virtual friends 并查集
题意很简单就是告诉你一些话,然后就是说这两个人刚成为好朋友,然后问你就是到每句话的这两个人的朋友网里面有多少人。这个题目的输入比较麻烦啊,tle好几次。解法就是每读入一条边就用并查集的思想,修改祖先节点,然后修改包括祖先的朋友网的大小,然后输出祖先节点的朋友网的规模就可以了。 #include #include #include #include using namespace std; map原创 2013-05-08 23:31:57 · 1406 阅读 · 0 评论 -
poj 1703 find them,catch them
这个题目是典型的种类判断的并查集,种类判断的并查集似乎无一例外的全部用到了relation(与祖先的关系),然后就是找关系化简式子然后套用种类判断并查集的通常做法就好。这个题目就是告诉你,现在一个城市里面有两个帮派,任何一个帮派分子不是属于这个帮派就是属于另一个帮派。现在告诉你现在有多少帮派分子,然后有m句话,其中A开头的表示询问这两个人的关系如何,D是告诉你这两个人不是一伙的。附代码。 #in原创 2013-05-22 10:00:04 · 1097 阅读 · 0 评论 -
poj 1611 the suspects
这个题目就是说现在已经知道0号是非典型性肺炎的患者,现在给你一些人及关系网就是说这些人只要有一个人得病其余的人也全都得病,现在问一共有多少人得病。其实这个题目说简单很简单,其实你只要按照最普通的并查集做法,然后另加一个数组记录这个团体一共有多少人得病就好了。这个题目和hdu virtual friend这个题目是有很大的相似处的,简单模仿一下就都会写了。 #include #include us原创 2013-05-21 22:07:02 · 890 阅读 · 0 评论 -
hdu 1272 小希的迷宫
这个题目就是让你用并查集判断是不是有回路和是不是连通图.判断是不是连通图就是看是不是只有一个接点的father是他自己本身.看是不是有回路,就是看是不是有两个接点的father是相同的,因为无论如何第一次是合并节点,当前的父节点必然不同直接合并,也就是找一个当父节点,但是到后面的时候如果父节点出现相同了,必然是有回路.但是要特别注意输入输出.还有全是0的时候一定是yes #include us原创 2013-05-17 19:53:05 · 792 阅读 · 0 评论 -
poj 2912 rochambeau
这个题目并查集的意味还是比较浓厚的,刚开始纠结于里面的数是不是全是正的,其实不是是全体整数。 思路就是枚举谁是judge,然后有judge的当然不能用并查集找矛盾了。除了有judge的边不添加,当添加其他边出现矛盾时,这个假定的judge必然不是真正的judge。这个题目还要记录有几组可能的judge,并且如果只有一个可能还要输出最少多少行后能知道答案。后一个问题要求出所有的其他情况最少出错的行原创 2013-08-29 17:01:44 · 672 阅读 · 0 评论