随笔分类 -  并查集

摘要:算法 并查集+逆序 思路 做这道题前呢,我们先出门左转关闭农场,一道类似的更简单一丢丢的题 然后,我们考虑一下这题,因为并没有过多的操作,只是要我们求一下连通块的个数而已(也就是连通性,具有传递性的连通),而这恰好是并查集所擅长的。 然而,我们正向看题目时就会发现不支持删除操作的并查集似乎办不到。但 阅读全文
posted @ 2020-04-19 12:59 人生有味是清欢 阅读(133) 评论(0) 推荐(0) 编辑
摘要:算法 并查集+逆序 思路 首先读入相连的点,但这里不能直接合并建立并查集,因为并查集没有Ctrl+Z操作(就是无法分离两个已经合并的集合),所以我们要先存起来,等所有的询问都读入之后,倒着进行操作。 我们考虑怎样倒着操作: 首先,读入数据,把所有的数据都存起来,其中x[i],y[i]表示第i次读入的 阅读全文
posted @ 2020-04-19 12:44 人生有味是清欢 阅读(119) 评论(0) 推荐(0) 编辑
摘要:算法 并查集+map 思路 板子改为字符串 代码 #include<iostream> #include<cstdio> #include<map>//map库 using namespace std; map<string,string> a;//建立映射 string fin(string x) 阅读全文
posted @ 2020-04-19 08:47 人生有味是清欢 阅读(182) 评论(0) 推荐(0) 编辑
摘要:算法 并查集+map 思路 与负数,用map 代码 #include<bits/stdc++.h> #define r(i,a,b) for(int i=a;i<=b;i++) using namespace std;int n,m,p,q,u,v,tat,tot; map<int,int>f;// 阅读全文
posted @ 2020-04-19 08:38 人生有味是清欢 阅读(206) 评论(0) 推荐(0) 编辑
摘要:算法 01背包+并查集 思路 既然这样,那这道题是否可以转换为01背包呢? 答案很明显是可以的。可以利用并查集,将这m组配对购买的商品划到一个集合里,这样就可以确定买了其中一个就得买另一个。 最后就是01背包啦! 代码 #include <cstdio> #include <iostream> #i 阅读全文
posted @ 2020-04-18 20:00 人生有味是清欢 阅读(170) 评论(0) 推荐(0) 编辑
摘要:算法 最小生成树 思路 其实就是一道最小生成树的模板题,我在这里用的是kruskal算法,唯一需要注意的是每加入一条边都要判断s,t是不是在一个集合里面,这样就可以顺利AC了。(排序了) 代码 #include<cstdio> #include<cstring> #include<iostream> 阅读全文
posted @ 2020-04-18 19:54 人生有味是清欢 阅读(177) 评论(0) 推荐(0) 编辑
摘要:算法 最短路+变式 思路 我们仔细思考一下,对于任意一个点,到它的最大拥挤度的最小值肯定是与它相邻的一个点的此值和他们之间的边权值取一个max,然后在所有max中取一个min! 这样我们就可以想到只要把板子里的松弛稍微修改一下,即只需把原本的求和改为取max就ok了! 另,注意此题应构无向图!! 代 阅读全文
posted @ 2020-04-18 19:43 人生有味是清欢 阅读(198) 评论(0) 推荐(0) 编辑
摘要:算法 最小生成树+kruskal 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define N 1005 using namespace std; int 阅读全文
posted @ 2020-04-18 19:34 人生有味是清欢 阅读(131) 评论(0) 推荐(0) 编辑
摘要:#include<bits/stdc++.h> using namespace std; struct hh { int x,y,t; }a[200000]; int f[200000],n,m; int cmp(const hh &a,const hh &b){return a.t<b.t;} i 阅读全文
posted @ 2020-04-18 19:28 人生有味是清欢 阅读(149) 评论(0) 推荐(0) 编辑
摘要:算法 并查集+扩展域 思路 扩展域并查集维护三个域:x_self同类,x_enemy天敌,x_eat捕食。 他们之间的关系: 假设有x,y两个动物, 如果题目给定x和y是同类,那么合并x_self,y_self和x_enemy,y_enemy和x_eat和y_eat。 前提条件是:x_self与y_ 阅读全文
posted @ 2020-04-18 17:09 人生有味是清欢 阅读(167) 评论(0) 推荐(0) 编辑
摘要:算法 并查集+带权 思路 链也是树。接到后面等同于合并集。 find int get(int x) { if (x == fa[x]) return x; int root = get(fa[x]); d[x] += d[fa[x]]; return fa[x] = root; } 修改 int m 阅读全文
posted @ 2020-04-18 16:55 人生有味是清欢 阅读(131) 评论(0) 推荐(0) 编辑
摘要:算法 并查集+离散化 思路 离散化 sort(l,l+tot); int start=unique(l,l+tot)-l; for(int i=1;i<=n;++i){ a[i].x=lower_bound(l,l+start,a[i].x)-l; a[i].y=lower_bound(l,l+st 阅读全文
posted @ 2020-04-18 16:49 人生有味是清欢 阅读(159) 评论(0) 推荐(0) 编辑