并查集
CoderFly
如果现在不努力,那跟咸鱼有什么区别。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVA12232加权并查集 加点
#include #include #include #include #include #include #include #include #include #define INF 0x3f3f3f3f #define MAXN 20010 #define MAXM 3010 using namespace std; int N,Q,bug,原创 2016-10-05 00:29:12 · 408 阅读 · 0 评论 -
UVA11987 并查集
第一、三个操作 直接带权并查集就可以解决关键是第二个 第二个问题在于合并两个节点的时候 第一个节点的子节点会跟着合并到第二个节点中 这提示我们 只要1~n都不作为父节点就可以了 所以初始化的时候将 每个节点的父亲节点设为 n+i 这样无论怎样合并节点1~n都不可能成为父节点 那么进行第二个操作的时候只要 将p节点合并到q节点父节点下就可以了 具体看代码 第一个操作和第二个操作合并原创 2016-10-05 00:27:45 · 380 阅读 · 0 评论 -
LA6910Cutting Tree 逆向并查集
先拆边,再倒着加边保存答案 注意记录某条边拆了几次就可以了#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<vector> using namespace std; int f[20010],a[20010]; int ans[5010]; struc原创 2016-10-20 21:28:27 · 334 阅读 · 0 评论 -
CF722C倒序并查集
题目大意 给你n个正数以及一个排列 让你按照排列中的顺序依次摧毁这n个数 每摧毁一次求一下连通块的最大和 思路 倒着并查集:先将所有点摧毁,再倒序连接,维护最大和。#include <bits/stdc++.h>using namespace std; typedef long long ll; const int Max=1e5+10; ll a[Max],ans[Max]原创 2016-10-31 16:18:38 · 1066 阅读 · 0 评论 -
LA4730 UVA1455 线段树+并查集
以y轴建线段树 把坐标*2 初始化各节点 洲,城市 数目为0 并查集维护每一个连通块的 y坐标最大值最小值(x坐标没用)城市数目 合并时 如果是一个洲(城市数大于1) 线段树对应区间减掉该洲城市数 然后将两个洲合并,再在线段树对应区间增加大洲的城市数 (区间城市数不等于子区间城市数之和)#include <bits/stdc++.h>using namespace std; const in原创 2016-11-20 22:14:02 · 403 阅读 · 0 评论
分享