/** 题目:#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…
Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作: 1.查询u到根路径上的第一条黑色边的标号. 2.将u到v    路径上的所有边的颜色设为黑色. Notice:这棵树的根节点为1 Input 第一行两个数n,m分别表示点数和操作数. 接下来n-1行,每行2个数u,v.表示一条u到v的边. 接下来m行,每行为以下格式: 1 v 表示第一个操作 2 v u 表示第二种操作 n,m<=10^6 Output 对于每个询问,输出相应答案.如果不存在,输出0 题解:我…
[BZOJ3319]黑白树 Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v    路径上的所有边的颜色设为黑色.Notice:这棵树的根节点为1 Input 第一行两个数n,m分别表示点数和操作数.接下来n-?    1行,每行2个数u,v.表示一条u到v的边.接下来m行,每行为以下格式:1 v 表示第一个操作2 v u 表示第二种操作 Output 对于每个询问,输出相应答案.如果不存在,输出0. S…
 题意:有一些货物,每一个货物有价值和卖出的截至日期,每天能够卖一个货物,问能卖出的最大价值是多少. 思路:算法不难想到,按价值降序排列.对于每一件货物,从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…
题意: 对于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…