
并查集
99度灰
这个作者很懒,什么都没留下…
展开
-
HDU 1272 - 小希的迷宫
题目大意:中文题 解题思路:并查集,如果输入的两个点的关系之前已经确定而在一个集合里了,就说明出错了,造成多个通路可以到达,只输入0 0要是Yes,且要保证意两个房间有且仅有一条路径。也就是最后都在一个集合内。 ac代码: #include #include using namespace std; int flag, n, m, pre[100005], vis[100005]原创 2017-09-06 15:54:22 · 263 阅读 · 0 评论 -
POJ 2236 - Wireless Network
题目大意:有n台电脑编号从1~n,都报废了,每台电脑有个坐标,如果两台电脑都是好的,他们距离小于d就能通讯了。有两种操作,O x表示修x号电脑,S x1 x2表示问你x1和x2能不能间接或直接的取得通讯。 解题思路:O和0傻傻分不清。。。并查集解,每修好一台电脑,就去尝试找可以通讯的电脑(同样未报废)。pre[i]=0表示电脑报废的。 ac代码: #include #include原创 2017-09-06 15:51:47 · 313 阅读 · 0 评论 -
POJ 1611 - The Suspects
题目大意:有编号为0~n-1的n个人,其中编号0中了SARS,如果跟他同一组就也会得病,问一共有多少人得病。输入m组,每组的成员。只有有同一个组员,则两个组是同一个组。 解题思路:并查集基础,只是因为0号得病,所以0号作为最上级的话便于查找,所以在合并时要考虑是否其中某个的上级为0,如果有,则合并时注意将另一个的上级的上级改为0。 ac代码: #include using name原创 2017-09-06 15:51:05 · 251 阅读 · 0 评论 -
HDU 1232 - 畅通工程
题目大意:中文题 解题思路:最基础的并查集,注意一点,虽然路径优化了,但pre[i]不一定就是最上级,所以最后查找还得用find函数。该博客详尽的多http://blog.youkuaiyun.com/dellaserss/article/details/7724401/ ac代码: #include #include using namespace std; int n, m, t1, t原创 2017-09-06 15:50:24 · 236 阅读 · 0 评论 -
HDU 1856 - More is better
题目大意:给出n对朋友关系,朋友的朋友就是朋友,问最大的朋友圈有多少人。 解题思路:并查集,多一个计数的数组,初始时,每个人都是个体,为1。归并时累加,查找时不用变动。多一个标记数组,标记那些编号有参与。 ac代码: #include #include #include using namespace std; int n, pre[10000005], t1[100005],原创 2017-09-06 15:58:34 · 247 阅读 · 0 评论 -
HDU 1198 - Farm Irrigation
题目大意:有11种水管放置的方式,给一个m*n的大农田,每块小农田有各自的水管放置方式,问至少需要多少个水源才能让所有小农田都有水流过其中的水管。 解题思路:dfs将11种方式的上下左右可通表示出来,如果其某个方向的放置放置可以与其对接就进入下一层并标记。并查集方式类似,将11种方式的上下左右可通表示出来,如果其某个方向的放置放置可以与其对接就合并,最后判断有几个集合。 dfs方法ac原创 2017-09-06 15:59:59 · 298 阅读 · 0 评论