并查集
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 · 373 阅读 · 0 评论 -
UVA11987 并查集
第一、三个操作 直接带权并查集就可以解决关键是第二个第二个问题在于合并两个节点的时候 第一个节点的子节点会跟着合并到第二个节点中 这提示我们 只要1~n都不作为父节点就可以了所以初始化的时候将 每个节点的父亲节点设为 n+i 这样无论怎样合并节点1~n都不可能成为父节点 那么进行第二个操作的时候只要 将p节点合并到q节点父节点下就可以了具体看代码 第一个操作和第二个操作合并原创 2016-10-05 00:27:45 · 342 阅读 · 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 · 293 阅读 · 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 · 998 阅读 · 0 评论 -
LA4730 UVA1455 线段树+并查集
以y轴建线段树 把坐标*2 初始化各节点 洲,城市 数目为0 并查集维护每一个连通块的 y坐标最大值最小值(x坐标没用)城市数目 合并时 如果是一个洲(城市数大于1) 线段树对应区间减掉该洲城市数 然后将两个洲合并,再在线段树对应区间增加大洲的城市数 (区间城市数不等于子区间城市数之和)#include <bits/stdc++.h>using namespace std;const in原创 2016-11-20 22:14:02 · 364 阅读 · 0 评论