
并查集
nike0good
这个作者很懒,什么都没留下…
展开
-
HYSBZ 1050(队列-大小边比值最大的路径)
已知边,判断2点连通性要用并查集……千万别搜啊~Program ee;var edge:array[1..10000,1..3] of longint; s,t,n,m,i,j,pmax,pmin:longint; father:array[1..1000] of longint;procedure swap(var a,b:longint);var原创 2012-09-11 17:51:54 · 753 阅读 · 0 评论 -
中国(北方)大学生程序设计训练赛(第二周)(Problem G: Connected Components-并查集)
给一张图,点数n<=100000,每个点有一个权1≤Xi≤10000001\le X_i\le1000000,两点不互质则连边,求连通块个数。对于每个权值把它的素因子也纳入图,然后每个权值与其素因子连边。 注意特判1#include <iostream>#include <cmath>#include <algorithm>#include <cstdio>#include <cstrin原创 2017-03-14 11:14:09 · 1675 阅读 · 0 评论 -
ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) 题解(A-E)
A A Serial Killer#include<bits/stdc++.h>using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) fo原创 2017-02-24 10:55:00 · 885 阅读 · 0 评论 -
BZOJ 4551([Tjoi2016&Heoi2016]树-倒序并查集)
Description在2016年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个 结点,可以打多次标记。)2. 询问操作:询问某个结点最近的一个打了标记的祖先(这个结点本身也算自己的祖 先)你能帮帮他吗? Input输入第一行两个正整数N和Q原创 2017-02-01 02:24:53 · 345 阅读 · 0 评论 -
BZOJ 4320(ShangHai2006 Homework-询问分段+并查集)
Description1:在人物集合 S 中加入一个新的程序员,其代号为 X,保证 X 在当前集合中不存在。 2:在当前的人物集合中询问程序员的mod Y 最小的值。 (为什么统计这个?因为拯救 过世界的人太多了,只能取模) Input第一行为用空格隔开的一个个正整数 N。 接下来有 N 行,若该行第一个字符为“A” ,则表示操作 1;若为“B”,表示操作 2; 其中 对于 1原创 2017-03-02 12:37:18 · 488 阅读 · 0 评论 -
西安十五日游day10 分治
CodeForces 484E Sign on FenceUVALive 7469 Distance on TriangulationHDU 4812 D TreeCodeForces 97B SupersetOpenJ_POJ C15C Rabbits FestivalHDU 5721 PalaceHDU 5755 Gambler BoCodeForces 484E Sign on F原创 2016-08-14 10:25:07 · 731 阅读 · 0 评论 -
BZOJ 4668(冷战-并查集按秩合并)
1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕。美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争。在这段时期,虽然分歧和冲突严重,但双方都尽力避免世界范围的大规模战争(第三次世界大战)爆发,其对抗通常通过局部代理战争、科技和军备竞赛、太空竞争、外交竞争等“冷”方式进行,即“相互遏制,不动武力”,因此称之为“冷战”。原创 2016-08-31 16:00:09 · 728 阅读 · 0 评论 -
BZOJ 3673/3674(可持久化并查集 by zky,可持久化并查集加强版-可持久化数组)
可持久化数组可以模拟可持久化并查集(新技能get) 参考了hzwer的代码.#include<bits/stdc++.h>using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define Rep(i,n) for(int i=0;i<n;i++原创 2016-06-30 23:57:50 · 483 阅读 · 0 评论 -
ICPCCamp 2016 Day 2 - ZhejiangU Contest(Easy When You Know How-并查集+rmq)
题意:给一个长度为n的字符串和m个事实,每个事实是xi,yi,lix_i,y_i,l_i表示 sxi,sxi+1,…,sxi+li−1=syi,syi+1,…,syi+li−1s_{x_i},s_{x_i+1},\ldots,s_{x_i+l_i-1}=s_{y_i},s_{y_i+1},\ldots,s_{y_i+l_i-1} 已知这个字符串只有小写字母,问可能的字符串个数。 1≤n,m≤2原创 2016-02-24 13:01:51 · 945 阅读 · 0 评论 -
bnuoj 51275(道路修建-并查集按秩合并)
题意:维护一个并查集,但需要询问2个点是在第几次操作后连通的。 直接可持久化并查集应该行, 但更简单的方法是,把并查集按秩合并, 即t时刻,在u,v所处连通块间连一条权值为t的边, 这样每个并查集的树高是log级的。#include<bits/stdc++.h>using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#defi原创 2016-02-16 20:58:12 · 667 阅读 · 0 评论 -
CF 505B(Mr. Kitayuta's Colorful Graph-并查集)
B. Mr. Kitayuta's Colorful Graphtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputMr. Kitayuta has just bough原创 2015-01-19 15:11:57 · 1812 阅读 · 0 评论 -
POJ 1182(食物链-另类做法【拆点】)[Template:并查集]
食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 46039 Accepted: 13400Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动原创 2014-10-19 22:45:32 · 1460 阅读 · 0 评论 -
Relation(Path集-改变father后必须进行dis维护)
Relation(relation.pas/.cpp) Description 有n个人,编号为1àn,告诉你那些人之间是不友好的。现在,让你将这n个人分成两组,使得每一组之内的人是互相友好的,如果可以分成两组,则输出如何分组的,如果不可以分成两组,那么,输出“IMPOSSIBLE”。 Input 第一行两个整数n和m,1,0,分别表示人数以及不友好的人的对数。以下原创 2013-10-24 12:55:28 · 1412 阅读 · 0 评论 -
旅行(并查集-链)
这题最关键的是如何跳过无用结点可以用链表,每一个结点指向它或它右侧的可用结点但是查找悲剧所以,我们可以用并查集,把所有结点指向[它或它右侧的可用结点]这样就可以直接跳过,注意 根为最右侧可用结点,其它结点为它左侧所有删去的点 #include#include#include#include#include#include#include#include#in原创 2013-07-06 16:10:41 · 1350 阅读 · 0 评论 -
RQNOJ 600(Path集)
查看题目 Show Problem题目:[NOIP2010]关押罪犯问题编号:600题目描述S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c原创 2012-11-13 10:55:08 · 1095 阅读 · 0 评论 -
CF 217A (森林数)
求森林数,裸的并查集Program c;var n,i,j,ans:longint; map:array[1..100,1..2] of longint; f:array[1..100] of longint;function getfather(a:longint):longint;begin if f[a]=a then exit(a); f[a原创 2012-10-28 08:30:17 · 1060 阅读 · 0 评论 -
POJ 2110(最小生成树)
这题的思路就是找一个范围,看看这个范围是否可行主流是二分Ans,我是先把点排序,求最小生成树检查首位的Program P2110;type ed=record u,v,w:longint; end;var a:array[1..120,1..120] of longint; edge:array[0..30000] of ed;原创 2012-09-21 17:52:40 · 891 阅读 · 0 评论 -
POJ 1611(并查集)
唯一的WA是把0的父亲当成祖先father[x]和getfather(x)差别巨大啊Program p1611;const maxn=30010; maxm=500;var n,m,i,j,k,p1,p2,ans,f0:longint; father:array[0..maxn] of longint;function getfather(x:lo原创 2012-09-30 21:11:47 · 942 阅读 · 0 评论 -
CF 844E(Binary Matrix-压缩存储的矩阵的连通块)
给1个n*m的01矩阵,求1的连通块个数 注意每行的每连续4个数压缩成一个16进制数输入 (1 ≤ n ≤ 212,4 ≤ m ≤ 214,4|m(1 \le n \le 212, 4 \le m \le 2^14 , 4|m 对于每一行存储每个位置属于哪个连通块,用并查集向下转移,如果有连通块无法向下连通则累加答案#include<bits/stdc++.h> using name原创 2017-10-28 21:25:31 · 551 阅读 · 0 评论