并查集
文章平均质量分 60
Sirius_Ren
▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇自己刮~~~
展开
-
BZOJ 4195 程序自动分析
4195: [Noi2015]程序自动分析Description在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3原创 2016-05-15 23:30:15 · 913 阅读 · 0 评论 -
POJ 1944 并查集(模拟)
思路: 肯定是要枚举断点的。。就看枚举完断点以后怎么处理了…… 1.用类似并查集的思想… f[x]=max(f[x],y)表示x和y相连(一定要注意取max,,,血的教训) 复杂度O(np) 2.猥琐思路 每回枚举完断点以后sort一遍 用左右指针扫一遍就OK.. 需要高超的卡时技巧就能过 复杂度:O(nplogp)// by SiriusRen #include <cstdio> #原创 2016-08-25 19:03:50 · 679 阅读 · 0 评论 -
BZOJ 3211 线段树+并查集
思路: 我们很容易发现 一个数开根号 开几(很小)次 就到了1 1 再怎么开 都是1 由于这个性质 我们就可以用并查集 了//By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> using namespace std; #define int long long int n,m,tree[66666原创 2016-10-12 09:16:41 · 353 阅读 · 0 评论 -
BZOJ 1015 并查集
思路:考虑时光倒流 先把没有被删掉的点之间的边加上去 再从后向前加边 用并查集判断连通性即可//By SiriusRen #include <vector> #include <cstdio> using namespace std; #define N 400050 int n,m,xx,yy,q[N],f[N],ans[N],cnt,k,vis[N]; vector<int>v[N]; int原创 2016-10-12 13:03:18 · 566 阅读 · 0 评论 -
BZOJ 1050 枚举+并查集
思路: 枚举最大边 像Kruskal一样加边 每回更新一下 就搞定了…//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 10050 int n,m,s,t,fx,fy,f[N],stk[N],top,vis[N],recx,rec原创 2016-10-17 09:50:22 · 769 阅读 · 0 评论 -
POJ 1988 带偏移量的并查集
题意: 思路: 数据范围很大 貌似只能用并查集了……//By SiriusRen #include <cstdio> using namespace std; int p,f[33333],d[33333],xx,yy,s[33333]; int find(int x){ if(x==f[x])return x; int fx=find(f[x]); d[x]+原创 2016-10-30 20:23:54 · 685 阅读 · 0 评论 -
BZOJ 4551 HEOI 2016 树 (并查集)
思路: 考虑时光倒流 这不就是并查集裸题了…………….//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 500500 int n,q,xx,yy,v[N],first[N],next[N],tot,fa[N],f[N],ask[N],vis原创 2017-01-02 14:56:12 · 635 阅读 · 0 评论 -
HDU 1512 左偏树+并查集
思路: 左偏树里面掺了一些并查集的应用这里放一份左偏树的代码模板 重点就是merge函数了……int merge(int k1,int k2){ if(!k1||!k2)return k1+k2; if(tr[k1].w<tr[k2].w)swap(k1,k2); tr[k1].r=merge(tr[k1].r,k2); if(tr[tr[k1].l].dis<t原创 2016-12-20 14:57:48 · 802 阅读 · 0 评论 -
BZOJ 2733 线段树的合并 并查集
思路: 1.线段树合并(nlogn的) 2.splay+启发式合并线段树合并比较好写 我手懒//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=100050; int n,m,q,a[N],f[N],xx,yy,son[N*50][2]原创 2017-02-11 22:23:23 · 523 阅读 · 0 评论 -
POJ 3657 并查集
题意: 思路:1.二分+线段树(但是会TLE 本地测没有任何问题,但是POJ上就是会挂……) 2.二分+并查集 我搞了一下午+一晚上才搞出来…………..(多半时间是在查错)首先 如果我们想知道这头奶牛之前的奶牛回答的是不是错的怎么办呢?把回答的A从大到小排个序。这里有几种错的方式: 如果后面的区间完全被前面的区间包含,这是错的 如果有两个不相交的区间的A是一样的,这也是错的(题目保证没有两原创 2016-08-30 11:20:54 · 732 阅读 · 0 评论 -
POJ 1182 食物链 并查集
带权并查集#include <cstdio> using namespace std; int f[50005],q,w,e,d[50005],ans=0,n,k; int find(int x) { if(x==f[x]) return x; int fx=find(f[x]); d[x]=(d[x]+d[f[x]])%3; return f[x]=fx; } vo原创 2016-03-19 16:40:01 · 455 阅读 · 0 评论 -
POJ 1703 带权并查集
直接解释输入了: 第一行cases. 然后是n和m代表有n个人,m个操作 给你两个空的集合 每个操作后面跟着俩数 D操作是说这俩数不在一个集合里。 A操作问这俩数什么关系 不能确定:输出Not sure yet. 在一个集合里:输出In the same gang. 不在一个集合里:输出In different gangs. 这题挺像http://poj.org/problem?原创 2016-07-10 20:09:52 · 608 阅读 · 0 评论 -
POJ 1386 判断欧拉回路
题意:要开启一扇门,n个单词是密码,n个单词中,如果一个单词的首字母和前一个单词的尾字母相同,并且每个单词都能这么连起来且只用一次,则门可以开启,否则不能开启,现给出单词,判断门是否可以开。有向图欧拉通路充要条件:D为有向图,D的基图连通,并且所有顶点的出度与入度都相等;或者除两个顶点外,其余顶点的出度与入度都相等,而这两个顶点中一个顶点的出度与入度之差为1,另一个顶点的出度与入度之差为-1。 有原创 2016-07-12 19:36:21 · 765 阅读 · 0 评论 -
HDU 3018 一笔画问题
题意:给你一个图 判断最少用几笔把这个图画出来(画过的边不能重新画) 思路: 并查集+欧拉回路 仔细想一想。 在一个强连通分量中 所有度为奇数的点之和÷2就是要画的笔画数 Now question :如果这是个欧拉回路怎么办? +1就OK啦答案就是奇度数的点÷2+欧拉回路的个数// by SiriusRen #include <cstdio> #include <cstring> #def原创 2016-07-12 19:44:13 · 391 阅读 · 0 评论 -
POJ 2513 trie树+并查集判断无向图的欧拉路
生无可恋 查RE查了一个多小时。。 原因是我N define的是250500 应该是500500!!!!!!!!! 身败名裂,已无颜面对众人。。吐槽完了 我们来说思路。。。 思路: 判有向图能否形成欧拉路 但是他给的是string,怎么转化成int呢? trie树! 这东西有多么优美我就不说了。。。 反正写起来不难。 具体的请见代码吧// by SiriusRen #incl原创 2016-07-12 22:17:45 · 627 阅读 · 0 评论 -
NOIP 2010 关押罪犯 并查集 二分+二分图染色
题目描述:S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件。 每年年末,警察局会将本年内监原创 2016-07-04 22:19:22 · 1002 阅读 · 0 评论 -
POJ 2492 A Bug's Life 带权并查集
题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1。 如果两只虫子相恋且距离为零,则它们是同性恋。(出题人好猥琐啊) 注意: 不能输入一半就break出来。。。。。一定要读入所有的数据!!!! 因为是多组询问。。。被这个东西坑惨了。//By SiriusRen #include <cstdio> #include <cstring> #inclu原创 2016-07-07 11:28:09 · 675 阅读 · 0 评论 -
TYVJ 1941 BZOJ3038 上帝造题的七分钟2 并查集+树状数组
背景 XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 描述“第一分钟,X说,要有数列,于是便给定了一个正整数数列。 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。 第三分钟,k说,要能查询,于是便有了求一段数的和的操作。 第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围。 第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。 第六原创 2016-07-08 10:51:37 · 449 阅读 · 0 评论 -
BZOJ 1116 并查集
思路: 如果 每个联通块 边数>=点数 就OK 用并查集搞//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=100050; int n,m,xx,yy,sizep[N],sizee[N],f[N]; int find(int x){re原创 2017-03-04 21:09:18 · 323 阅读 · 0 评论