并查集
文章平均质量分 96
浪子小黄人
这个作者很懒,什么都没留下…
展开
-
Save your cat (Aizu 2224 并查集)
题意:有N个木桩M个栅栏,栅栏连接木桩,现在这些栅栏围成的封闭空间里有至少一只猫,要求破环若干个栅栏救出猫,问破环栅栏的最小长度。思路:并查集,我也是参考了别人的思想,首先将边存在结构体edge里面,按照边长从大到小排序,然后遍历M条边,当加入某条边时,若两个端点的father值不同,则修改father[x],添加到同一个集合里;设想当加人某一条边时,它的两个端点的father值相同,则加入这条边将形成一个封闭空间(题目中说栅栏不会相交错),那么要打破这个封闭空间就是将这条边破环就行了。Descr原创 2014-11-09 13:17:12 · 1278 阅读 · 0 评论 -
Supermarket poj 1456 贪心+并查集优化
题意:超市有n个商品,每个商品有利润p和保质期d,每天卖一种商品问怎么卖才能使利润最大,求出最大利润。思路:贪心,先按照商品利润从大到小排序,选出利润大的开始卖,卖的时间就在保质期d当天,若当天已经有商品在卖了,就从d往前推 看哪一天可以卖该商品。原创 2015-02-14 16:58:15 · 858 阅读 · 0 评论 -
C. Glass Carving (CF Round #296 (Div. 2) STL--set的运用 && 并查集方法)
题意:一个w*h的玻璃,现在水平或竖直切n次(“H”表示水平切,“V”表示竖直切),每一次切后输出当前切成的块中的最大面积。思路:用set记录切割的位置(要用两个set,分别来记录长和宽),multiset记录某一条边被切后 所得到的 小段的长度(也要两个,分别记录长和宽的)。那么每次切后就从multiset中取出最大的长和宽,相乘即得面积。原创 2015-03-18 17:03:34 · 794 阅读 · 0 评论 -
Wireless Network (poj 2236 并查集)
题意:有n台电脑损坏了,现在要将它们修复通讯,给出了这n台电脑的坐标位置,两台电脑i和j能够通讯的条件是:i和j都已经被修好的并且i,j之间的距离dis[i][j]<=d。有两种操作:1. O x 表示修好电脑x;2. S x y 表示检查电脑x和y是否联通,若联通输出SUCCESS,否则FALL。思路:先把n台电脑之间的距离求出来,然后进行并查集操作,当修复电脑x时,检查其他电脑是否有已经修好的并且距离小于d的,有的话就将x和这台连起来。询问时之间看两个的father是否一样。原创 2015-03-21 16:21:20 · 656 阅读 · 0 评论 -
Marked Ancestor (AOJ 2170 并查集)
题意:给出包含n个节点的树,初始时节点1的父节点为1并被标记,再给出其他n-1个节点的父节点,Q次询问,M x表示把节点x标记;Q x表示找出离x最近的被标记的父节点的编号,最后输出所有标号之和。思路:基础的并查集了,只不过这里要注意的是:寻找父节点时不要压缩路径。还要使用long long 。原创 2015-03-21 17:29:32 · 774 阅读 · 0 评论 -
B. Mr. Kitayuta's Colorful Graph (CF #286 (Div. 2) 并查集)
题意:现有n个点m条边的无向图,每条边都有一种颜色,然后有q次询问,x y询问点x到点y共有几种颜色的边将他们连起来(不同颜色的边不能混在一起,要分开看)思路:二维并查集,每种颜色维护一个并查集,查询时看某一种颜色下两个点是否有共同的father。原创 2015-03-29 16:16:31 · 738 阅读 · 0 评论 -
Pilot Work Experience (URAL 1888 并查集+floyd)
题意: 有n个航班,p个飞行员,每个航班要两个机长一起飞,一个机长一个副机长,现在每个机长的有一个经验值,并且正机长比副机长的经验值大1,现在不知道每个机长的经验值,只知道每个航班是那两个机长飞的,要求给每个机长规定一个经验值,并且尽量要最小值与最大值之差最大,输出任意一组解,若不存在解输出-1.思路:在训练赛过程中我的思路是最短路,如果存在可行解并且图是联通的,那么差值的最大值为最短路中的最大值,这个就很好处理了,求一遍floyd再求出mp[i][j]的最大值并记录下起点和终点,起点处的经验值为1,那其原创 2015-08-08 20:40:24 · 1021 阅读 · 0 评论 -
In Touch (hdu 5361 优先队列的Dij + 并查集优化)
题意:有n个点站成一排,相邻距离为1,每个点 i 可以联系上距离自己 x 的点并且花费Ci,其中Li<=x<=Ri,从点1开始,求联系到每个点的最少费用。思路:边太多,不可能建完边后再求最短路,感觉有点像隐式图,然后就是巧妙用到Dijstra,需要注意到的就是,这里是每个点有权值而不是边,那么dist[i]表示从1到 i 的花费再加上点 i 的花费,这样每个点就只会被更新一次,更新后在以后就不会再次被更新了,这里用到并查集把已经更新的点得father指向还没被更新的点。原创 2015-08-09 15:27:42 · 911 阅读 · 0 评论