并查集
文章平均质量分 62
Tekim
个人写点东西的地方
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
洛谷p1196银河英雄传说c++
原题 把两个舰队合并起来,查询某两个舰是否在同一舰队中,简单用一下并查集就可以了。 但本题不限于此,还需要求两个舰的距离,那么试试改并查集,并查集最大的特点就是利用祖先,那么他们的距离就可以用到祖先的距离差表示。 现在的问题是求某点到其祖先的距离,一定不能取消路径压缩计算次数,铁定超时。 开一个数组front[i]表示i点到祖先的距离,典型的加权并查集,在路径压缩时进行修改(详见代码)。原创 2017-08-31 14:35:53 · 962 阅读 · 0 评论 -
洛谷p1525关押罪犯
原题 挺有意思的一道题。 大多数人思路应该是贪心,将犯罪值有大到小排,将两个人放在两个并查集中,如果他们在同一个并查集就退出。这样你画一下样例就明白了,这两个人的确放在两栋楼,但是具体哪个人放在哪栋楼效果是不同的,而你要确定的话又需要枚举一遍,超时妥妥的。 两个互为敌人的位置无法确定,但是很明显还是要用并查集的。 敌人的敌人呢?他们是不是一定在同一栋楼?(贪心思想) 所以每次可以确定在一原创 2017-08-31 14:46:35 · 437 阅读 · 0 评论 -
洛谷p1455搭配购买
原题 没有搭配就是一道裸01背包,搭配的话用并查集并一并,结束后只取他们的祖先加入背包计算。 #include #include #include #include #include using namespace std; int n,m,mon,v[10001],w[10001],fa[10001],f[10001]; int find(int x) { if(fa[x]==x)原创 2017-08-31 14:58:46 · 453 阅读 · 0 评论 -
c++树状数组1模板
原题 这是一个模板,奇数点存本身值,偶数点根据其二进制中1的个数存2的n次方个值,这样改值用logn就可以了。 #include #include #include #include #include using namespace std; int n,m,a[500009],c[500009]; int change(int pos,int v) { for(int i=pos;i原创 2017-08-31 15:14:26 · 1247 阅读 · 0 评论
分享