http://codeforces.com/gym/101550/attachments [AC] #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ; int n,m,q; struct node { int x1,y1; int x2,y2; }nd[maxq]; int fir[maxn][maxn]; bool vis[maxn][maxn]; int fa[maxn*maxn]; int id(i…
P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反) 并查集本来就是连一对不同父亲的节点就的话连通块就少一个. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道互相直接或间接地连接. 但好景不长,很快帝国又重新造出了他的超级武器.凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球.由于星球的不断被摧毁,两个星球之间的通讯…
C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given a tree (a connected undirected graph without cycles) of nn vertices. Each of the n−1n−1 edges of the tree is col…
http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这样就把原来的删点变为了加点,加点的话计算连通块就方便的多,具体参见代码. #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<sstream&…
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可以利用这个性质 考虑一个左边的点和它右边联通的两个点,发现这两个点只能选择一个和这个左边的点匹配 那么我们考虑把这个点点匹配的模型转化成点边匹配 我们在同一个左边点连的两个右边点之间连边,那么问题就变成了一个点和一条相邻的边匹配,求完美匹配的问题了 而这个问题,我们显然可以用并查集来很好的解决 考虑…
/** 题目:#1291 : Building in Sandbox 链接:https://hihocoder.com/problemset/problem/1291 题意:就是一个三维的空间里,按照顺序放n个木块,每个木块满足两种条件. 1,和地面相邻或者和以前放过的木块有一个相邻的面. 2,不在封闭空间内.即可从无限远到达该木块. 判断该种放木块顺序是否合法. 思路:https://www.zhihu.com/question/42406890 逆向处理,并查集维护那些可以从无限远到达的位置…
参考:大牛blog 思路: 因为是环,所以可以复制一下图,先判断一下和他是不是和与他相邻的8个之一的一个障碍使得构成了一个环,环就是一个连通,用并查集维护即可: 如果没有就ans++,然后并把这个点加入. 大致意思就是这样. #include <cstdio> #include <algorithm> #include <cstring> #include <cstdlib> #include <ctime> #include <cmath…
题意:给定N,M,然后给出M组信息(u,v,l,r),表示u到v有[l,r]范围的通行证有效.问有多少种通行证可以使得1和N连通. 思路:和bzoj魔法森林有点像,LCT维护最小生成树.  开始和队友在想维护连通性,而不是维护树,这样好像会很麻烦. 队友yy了一个算法:用线段树模拟并查集维护连通性.(发现和标程有点像? 我的代码:LCT维护最小生成树. ...先给代码,后面补一下题解. #include<bits/stdc++.h> #define ll long long using nam…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍.至少要将人们分成几组. 解题思路:先用并查集求出所有的连通块,然后判断每个连通块内点的度数,如果有奇数点则需要的组数ans+=奇数点/2:反之,所需组数ans+=1.注意:如果遇到孤立点即度数为0的点则不用算进去,因为没有跟他相连的边. 代码: #include<iostream> #include<cstdio&…
这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先加进去一个数, 联通分量数字先加一, 然后再考虑有没有和其他联通分量 相连.从当前位置四个方向枚举, 如果这个数之前已经被选中, 同时 不是一个联通分量, 那么也就是说当前这个木块把两个联通分量变成一个 联通分量, 联通分量数减去一. 这里还要把二维的化为一维的编号, 方便并查集操作. 然后注意这里…
 题意:有一些货物,每一个货物有价值和卖出的截至日期,每天能够卖一个货物,问能卖出的最大价值是多少. 思路:算法不难想到,按价值降序排列.对于每一件货物,从deadline那天開始考虑.假设哪天空暇那么将货物在该天卖出. 假设直接暴力来做.复杂度为o(n*n),显然不行.能够用并查集来维护当前ddl之前空暇的近期的一天,假设父节点为0说明deadline之前没有空暇的时间,那么该货物就无法卖出. #include<cstdio> #include<cstring> #inclu…
The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 37090   Accepted: 17980 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T…
战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报. 输入格式: 输入在第一行给出两个整数N(0 < N <=500)和M(<=5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数.随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔.在城市信息之后给出被攻…
题意: 对于n个数a[0]~a[n-1],但你不知道它们的值,通过逐步提供给你的信息,你的任务是根据这些信息回答问题: I P V :告诉你a[P] = V I P Q V:告诉你a[P] XOR a[Q] = V Q K P1..PK:询问a[P1]^a[P2]^...a[PK]的值 n<=20000 题解:   首先看前两个操作: 第一个操作我们可以新加一个节点a[n]=0,则a[p]=val转化为a[p]^a[n]=val. 那么所有知道值的点必定都与a[n]在同一个并查集之内.   我们…
给一个1-base数组{a},有N次操作,每次操作会使一个位置无效.一个区间的权值定义为这个区间里选出一些数的异或和的最大值.求在每次操作前,所有不包含无效位置的区间的权值的最大值. 线性基删除不知道怎么维护,不妨逆向添加 然后区间连通性的维护自然要应用到并查集,每次操作mark一下当前位置,如果在操作时左边的区间已经mark过就搞它,右边同理 注意find时谁的基被插入 #include<iostream> #include<algorithm> #include<cstd…
 题目链接 /* 模板题-------判断欧拉回路 欧拉路径,无向图 1判断是否为连通图, 2判断奇点的个数为0 */ #include <iostream> #include <cstring> #include <vector> #include <cstdio> using namespace std; struct DisjoinSet {//并查集判断是否连通 vector<int> father, rank; DisjoinSet(i…
题意:俩头带有颜色的木棒,要求按颜色同的首尾相连,可能否? 思路:棒子本身是一条边,以俩端为顶点(同颜色共点),即求是否有无向图欧拉路(每条棒子只有一根, 边只能用一次,用一次边即选一次棒子). 先判断图是否连通,并查集判断即可,有fa[i]==i的,表示"根",连通图只能有一个这样根,大于1不连通. 在判断欧了图是否存在,度权为偶数或者只有2俩奇数为欧拉图,否则不是. 未1a原因: 1,有一段时间没写并查集了,这次并查集,并的时候也写错!SB啊! 2. 特殊情况,0个点的时候输出可能…
题目大意:给你一个N*N的棋盘,棋盘上每个点都有一个权值 第一问求一个权值形成的最大联通块中点的数量 第一问求两个权值共同形成的最大联通块中点的数量 提供一种并查集的做法:(感谢大佬们的题解)第一问把所有相同权值的相邻的点用带权并查集合并一下就OK了 第二问,就需要一些骚操作了 我们的目的是把两个不同权值的所有联通块合并,再去看它们共同形成的最大联通块的大小 可以用一个结构体记录两个联通块之间的关系 分别是两个联通块的标号(即这个联通块构成的并查集的祖先节点) 以及这两个联通块的颜色 而为了简化…
题目链接:https://cn.vjudge.net/problem/CodeForces-766D 题意 写词典,有些词是同义词,有些是反义词,还有没关系的词 首先输入两个词,需要判断是同义还是是反义,若没关系就按操作归为同义或反义 思路 经典并查集的动物园问题 维护两个并查集,find(a)表示a的同类代表元,find(a+maxn)表示异类代表元 find(a)==find(b) && find(a+maxn)==find(b+maxn) 就是说ab同类 find(a+maxn)==…
[题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的数量,然后求边双联通分量并记录每个结点v所属的连通分量号c[v],之后进行缩点,将每个双联通分量作为都缩成一个新点,如果新点之间可以连边就连边 (能不能连边取决于原图,我就不多bb辽,XD),形成新图. 对于每次询问x, y,判断c[x]!=c[y],然后从c[x]和c[y]分别向上寻找父结点,找到…
题意:给[1,n],n个数,有两种操作: 1 x,删去x2 x,查询还未被删去的数中大于等于x的最小的数是多少. input: output: 做法:按照并查集的方法压缩路径 代码: #include<bits/stdc++.h> using namespace std; #define int long long unordered_map<int,int> mp; int getf(int x){ if(!mp.count(x)) return x; else{ return…
先上一波题目 https://www.luogu.org/problem/P2024 通过这道题复习了一波并查集,学习了一波带权值操作 首先我们观察到 所有的环都是以A->B->C->A这样的三元环形式存在的 不同动物之间的关系有三种 同类 吃 被吃 那么我们用+1表示吃 +2表示被吃 0表示同类就可以很清楚的记录不同动物的关系了 这样我们只需要在合并并查集的时候对路径的权值进行一定的操作 就可以记录不同动物之间的关系以便查询了 #include<cstdio> #inclu…
水. /************************************************************** Problem: 1015 User: idy002 Language: C++ Result: Accepted Time:2072 ms Memory:14796 kb ****************************************************************/ #include <cstdio> #include &l…
题意网上自己随便找,绝对是找的到的. 题解:(白边表示鹅卵石路,黑边表示水泥路)这道题的解法,先考虑将黑边所有都先连起来,组成一个又一个的联通块,然后用白边去连, 如果可以联通的话,就用白边去代替黑边,必要的白边(就是维护联通性的白边必须要先保证),然后再去代替,直到k条边满足,不满足则输出NO 然后就再用黑边去连,记录,反正是Special Judge所以顺序没有关系,就好了. #include<cmath> #include<cstdio> #include<cstrin…
可以说是线段树合并的裸题吧 题意就是给你两个操作 一个操作是合并两个集合,这两个集合都是用权值线段树维护的,便于查询第k小元素 另一个操作就是查询区间极值了 #include<cstdio> ; int n,m,sz; int v[maxn],id[maxn],fa[maxn],root[maxn]; ],rch[],sum[]; inline int read() { ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} re…
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1935  Solved: 936[Submit][Status][Discuss] Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 Ai大于0时表示这个月盈利Ai 元,当 Ai小于0时表示这个月亏损Ai 元…
题意 https://vjudge.net/problem/CodeForces-722C 给你一个由n个非负整数组成的数列 a1​ ,a2​ ,...,an​ . 你将要一个一个摧毁这个数列中的数.并且,现在给你一个由 1 到 n 组成的序列来告诉你每个数被摧毁的时间顺序. 每当一个元素被摧毁时,你需要找到这个当前数列中的未被摧毁的数组成的和最大的连续子序列,另外,如果当前剩余的序列是空的的话,最大和就是0. 思路 正着删无法操作,那么我们考虑倒着加!每次加入一个点,判断这个点左右是否有数,有…
reference :https://www.cnblogs.com/ZERO-/p/10426473.html…
D-City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 2448 Accepted Submission(s): 862 Problem Description Luxer is a really bad guy. He destroys everything he met. One day Luxer went to D-city.…
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> #include<queue> using namespace std; int n,m; ; ; int degree[maxn]; int fa[maxn]; struct edge{ int to; in…