
数据结构---并茶几
这个作者很懒
小松萘
厉害的人可真多啊
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法复习 - AcWing - 数据结构
237. 程序自动分析一开始用种类并查集调了半天,,,但是这并不是要分为两类啊喂!A!=B, B!=C 不能推出A=C因为是离线,正确的思路:(0)数据太大,离散化(1)先把已知的相等情况处理完(2)对于不相等的情况,如果他们已经在同一个并查集里,则出错int f[MX];vector<pair<int,pair<int,int>>>v;int find(int x){ return x==f[x]?x:f[x]=find(f[x]);}原创 2020-10-04 21:51:33 · 782 阅读 · 1 评论 -
种类并查集
多维护一个和祖先节点的关系,由于路径压缩的原因,我们可以很方便的维护出这个关系关键点:与根节点,路径压缩下面是,一些数字,分为两类,判断是不是存不存在满足条件int f[MX];int tag[MX];//当前节点和根节点的关系,0表示相等.1表示不相等vector<pair<pair<int,int>,int>>v;int find(int x){ if(x==f[x]) return x; else { int原创 2020-10-04 21:18:52 · 190 阅读 · 0 评论 -
HDU - 2473 Junk-Mail Filter(并查集删点,虚点设置)
为每个结点设置映射,合并操作在映射上进行,删除操作相当于给当前结点换一个映射。int n,m;int mp[MX],f[MX],vis[MX];//mpÐé½áµãint find(int x){ return x==f[x]?x:f[x]=find(f[x]);}signed main(){ int _=0; while(scanf("%d %d",&am...原创 2020-03-21 20:15:58 · 185 阅读 · 0 评论 -
HDU - 3926 Hand in Hand (同构图判断,哈希思想)
???? ???? ????(1)每个人只有两只手,所以每个点最多有两条边,最后不是成链就是成环(2)判断是否同构即判断两个图生成的链,环条数即大小是否相等(3)一开始没有排序之后比较,而是直接比较的1~n的num与tag,,好傻,反例如下图int tag1[MX],f1[MX],num1[MX];int find1(int x) { return x==f1[x]?x:f1[x]=find1...原创 2020-03-14 20:16:04 · 373 阅读 · 0 评论 -
POJ - 1456 Supermarket (贪心)
???? ???? ????和这道题一模一样贪心,首先肯定尽量卖出去利润大的,其次每次卖出商品的时候我们尽量在最后期限卖出(为以后卖东西腾地方),这样就和cf那道题目一样了,只不过这道题维护的是-1//CE代码,实在懒得改了。。。int f[MAXN];int find(int x){ return f[x]==-1?x:f[x]=find(f[x]);}signed main(){ ...原创 2020-02-25 16:30:17 · 134 阅读 · 0 评论 -
ZOJ 3261 Connections in Galaxy War(逆向并茶几,离线处理)
???? ???? ????q次操作,每次操作删去某边或询问与某点相连的权值最大并且序列最小的点(权值要比该点大)的序号并不会用并茶几处理删边,所以我们记录下每次操作离线处理,倒序增边,最后输出答案即可有一个要注意的地方就是,因为是无向边,为了 保证我们查询的时候能查到某边,我们规定一边中序号小的在前。(刚开始栽在这里了)最后就是两个样例之间有空行。//摧毁边---->倒着加边int n,m,q,...原创 2020-02-25 15:42:38 · 125 阅读 · 0 评论 -
HDU - 3461 Code Lock (并茶几,区间合并)
???? ???? ????题读了半天题意:有一个长为n的字符串,同时该字符串上有m 个可以一起翻转的区间,如果两种字符串可以通过翻转相同,则视为一种字符串,问你长为n 的这个字符串有几种情况。比如长为1的时候,如果没有可翻转的字符串,那就有26种情况,如果1这个位置可以翻转,那么a=b=c=d=…一共就是一种字符串。(1)容易发现如果没有可翻转的字符串,答案即为26^n(2)每加入一个区间,方案数就减去...原创 2020-02-25 14:27:52 · 174 阅读 · 0 评论 -
CodeForces - 1315D Recommendations (集合,贪心)
???? ???? ????题意:每个点两个属性,a[ i ] ,t[ i ](给该点a[ i ] +1的消耗),现在要求ai各不相同,问你最小花费(1)如果某点的t小,只要该点的ai有重叠,肯定优先改变该点,所以排序的时候我们首先按照 t 排序(2)每次选择花费时间最小的改变—>尽量让大的不变,对于t大的点,优先加入并茶几中,以每个集合的父亲结点表示当前集合元素最小可达到位置,枚举元素并更新即可(3...原创 2020-02-24 17:08:39 · 394 阅读 · 0 评论 -
2020牛客寒假算法基础集训营1 F - maki和tree (并查集,计数)
???? ???? ????和这道题简直一模一样QWQ思路和上面链接那道题一样不再重复,有一点就是最后计算答案时,一开始for了两层 mp[ x ],T掉了,后来把式子转换一下发现可以优化掉一层for。思路是这样的,假设现在和某个黑色点相连的白色连通块大小分别为a,b,c,d,按照我的两层for计算公式是这样的:ab+ac+ad+bc+bd+cd,经过转化为:a(b+c+d)+b(c+d)+c*d**,所以我...原创 2020-02-07 18:04:19 · 217 阅读 · 0 评论 -
CF722C Destroying Array (逆向思维,并查集)
???? ???? ????这题,,,QAQ一开始真的没想到,缺少逆向思维,还有经常忘记有个算法叫二分,,QAQ这种删除元素的经常需要考虑逆序添加元素,然后我们就可以发现一个并查集写法,,每次增加元素的时候把他和左右两边能合并的合并。#define int llint a[MAXN],pos[MAXN],f[MAXN], sz[MAXN];int find(int x){ return x==f[x]?...原创 2020-02-05 15:07:03 · 202 阅读 · 0 评论 -
Educational Codeforces Round 64 (Rated for Div. 2) D - 0-1-Tree (并查集,方案数)
???? ???? ????//可能的路;全0,全1,前一段0,后一段1//对于只有0边存在的一个连通量,贡献为sz0*(sz0-1)//对于只有1边存在的一个连通量,贡献为sz0*(sz0-1)//前一半为0,后一半为1时,为(u,t) ,(t,v)的形式//枚举分界点t,他的贡献就与他所在的0连通分量及1连通分量大小有关:(sz0-1) * (sz1-1)int f[2][MAXN],sz[2][...原创 2020-02-03 17:20:31 · 195 阅读 · 0 评论