![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
芋智波佐助
菜鸟一只
展开
-
LA 3027 Corporative Network / 并查集
2种操作 I u v 把u的父节点设为v 距离为fabs(u-v)%1000 E u求u到根节点的距离 设dis[i] 为i节点到父节点的距离 在并查集压缩路径时更新dis数组 #include #include #include #include using namespace std; const int maxn = 20010; int dis[m原创 2014-01-19 11:29:52 · 971 阅读 · 0 评论 -
LA 3644 X-Plosives / 并查集
每种化合物由2中元素组成 现在要按照顺序装化合物 如果装的个数等于元素的种类 那么不可以装 求有多少个不可以装 输入的是每种化合物的2种元素 每个元素看成点 每个化合物连城一条边 那么等价于点数等于边数 就是环 用并查集判断环 #include #include #include #include const int maxn = 100010; using namespace s原创 2014-01-18 23:36:36 · 894 阅读 · 0 评论 -
UVa 10158 War / 并查集
我是百度的 嗯 并查集已经忘了 现在复习下 #include const int MAX = 20010; int frien[MAX]; int find(int x) { if(x != frien[x]) frien[x] = find(frien[x]); return frien[x]; } int main() { int n; int i; int a,b,c;原创 2013-12-16 10:50:48 · 938 阅读 · 0 评论 -
HDU 2473 Junk-Mail Filter 删点并查集
题目来源:HDU 2473 Junk-Mail Filter 题意:2中操作 M x, y 将x,y 合并到一个集合 S x 将x从所在的集合去掉 自己成为一个集合 最后求有多少个集合 思路:删点不好做 可以如果0 1 2在一个集合 可以定义个数组映射 就是每个点所对应实际的点 开始是a[0] = 0 a[1] = 1 a[2] = 2 说明都是自己 现在要去掉2 可以定义一个新的点 原来的原创 2014-07-17 21:06:10 · 1027 阅读 · 0 评论 -
POJ 3228 Gold Transportation 并查集
题目来源:POJ 3228 Gold Transportation 题意:有一些金矿要运走存储 求运送的最小最长边 思路:并查集 按边长从小到大排序 如果满足每个连通分量金矿的和小于等于存储的容量 那么就break输出 #include #include #include using namespace std; const int maxn = 210; int f[maxn], r原创 2014-07-27 09:59:32 · 1007 阅读 · 0 评论 -
HDU 3047 Zjnu Stadium 带权并查集
题目来源:HDU 3047 Zjnu Stadium 题意:给你一些人 然后每次输入a b c 表示b在距离a的右边c处 求有多少个矛盾的情况 思路:用sum[a] 代表a点距离根的距离 每次合并时如果根一样 判断sum数组是否符合情况 根不一样 合并两棵树 这里就是带权并查集的精髓 sum[y] = sum[a]-sum[b]+x 这里y的没有合并前b的根 #include #in原创 2014-07-18 13:44:24 · 1073 阅读 · 0 评论 -
POJ 1984 Navigation Nightmare 二维带权并查集
题目来源:POJ 1984 Navigation Nightmare 题意:给你一颗树 k次询问 求2点之间的曼哈顿距离 并且要在只有开始k条边的情况下 思路:按照方向 我是以左上角为根 左上角为原点 dx[i]为i点距离根的x坐标 dy[]是y坐标 这两个可以通过路径压缩求出 只不过是二维而已 #include #include #include using namespace st原创 2014-07-26 16:08:38 · 1217 阅读 · 0 评论 -
TOJ 1856 POJ 1308 HDU 1325 Is It A Tree? / 并查集
和小希的迷宫差不多 这题是有向的 我统计了一下根 只有一个根 并且边数等于节点数减一 #include #include #define MAX 1001 int bin[MAX]; int find(int x) { if(x!=bin[x]) return bin[x] = find(bin[x]); return bin[x]; } void原创 2013-08-16 16:31:53 · 971 阅读 · 0 评论 -
TOJ 1840 POJ 1127 HDU 1102 Jack Straws / 线段相交 + 并查集
题意就是判断是否2条线段相交 这个相交可以是间接相交 就是1和2 2 和3 分别相交 但是1和3虽然没有直接相交 但是也算 用并查集合并到一个集合就行 看看他们是否有公共的祖先 判断线段相交用叉积 #include #include struct point { double x,y; }; struct node { point p1,p2; }a[20]; i原创 2013-08-16 12:41:11 · 1014 阅读 · 0 评论