08 2016 档案
摘要:题目:文本编辑器editor(AHOI2006)做法:此题是由NOI2003的原题改编而来(原题我也写了博客,地址在此:NOI原题),就是多了一个翻转操作,以及提取时只用提取一个字符。用伸展树来维护当前编辑器中的文本,用一个数组p来存储标记,p[i]为真时表示以i为根...
阅读全文
摘要:题目:文本编辑器editor(AHOI2006)做法:此题是由NOI2003的原题改编而来(原题我也写了博客,地址在此:NOI原题),就是多了一个翻转操作,以及提取时只用提取一个字符。用伸展树来维护当前编辑器中的文本,用一个数组p来存储标记,p[i]为真时表示以i为根...
阅读全文
摘要:题目:文本编辑器Editor做法:此题用伸展树(Splay Tree)数列操作的方法来进行插入、删除和提取操作。如果伸展树的中序遍历为要操作的序列,我们就可以这样提取字符串:如要提取从第i个元素开始的len个元素,就将第i个元素所在的节点旋转到根,再将第i+len+1...
阅读全文
摘要:题目:文本编辑器Editor做法:此题用伸展树(Splay Tree)数列操作的方法来进行插入、删除和提取操作。如果伸展树的中序遍历为要操作的序列,我们就可以这样提取字符串:如要提取从第i个元素开始的len个元素,就将第i个元素所在的节点旋转到根,再将第i+len+1...
阅读全文
摘要:题目:郁闷的出纳员做法:了解平衡树这个数据结构的人应该一眼就能看出这个题目可以用平衡树做(平衡树的教程网上太多了,这里就不赘述了),用平衡树维护插入、删除、查找第k小(注意由于题目中询问第k大,就是查找第(目前员工数-k+1)小)的操作即可,再用一个数delta来记录...
阅读全文
摘要:题目:郁闷的出纳员做法:了解平衡树这个数据结构的人应该一眼就能看出这个题目可以用平衡树做(平衡树的教程网上太多了,这里就不赘述了),用平衡树维护插入、删除、查找第k小(注意由于题目中询问第k大,就是查找第(目前员工数-k+1)小)的操作即可,再用一个数delta来记录...
阅读全文
摘要:测试地址题目大意:一个图中的边有些是普通边,有些是特殊边,问有没有正好包含K条特殊边的最小生成树,如果有则输出一种方案,没有则输出no solution。做法:程序分两个阶段:1.先尽可能添加普通边构成生成树,那么这棵生成树中的特殊边就是必须要加入的,如果特殊边的数量...
阅读全文
摘要:测试地址题目大意:一个图中的边有些是普通边,有些是特殊边,问有没有正好包含K条特殊边的最小生成树,如果有则输出一种方案,没有则输出no solution。做法:程序分两个阶段:1.先尽可能添加普通边构成生成树,那么这棵生成树中的特殊边就是必须要加入的,如果特殊边的数量...
阅读全文
摘要:测试地址题目大意:给定一棵最小生成树,求以它为唯一的最小生成树的完全图(每两点之间都直接有边相连的图)的最小边权之和。做法:首先把最小生成树中的边按边权从小到大排序,依次枚举每条边,根据Kruskal的求最小生成树思路可知,加入这条边前两点属于不同的集合,而这条边又一...
阅读全文
摘要:测试地址题目大意:给定一棵最小生成树,求以它为唯一的最小生成树的完全图(每两点之间都直接有边相连的图)的最小边权之和。做法:首先把最小生成树中的边按边权从小到大排序,依次枚举每条边,根据Kruskal的求最小生成树思路可知,加入这条边前两点属于不同的集合,而这条边又一...
阅读全文
摘要:题目大意:在一个n*n的点阵上按顺序添边,到围成环的时候就停止,求添多少条边之后停止,如果添完所有边也不能停止,输出draw。做法:用二维并查集判环,如果当前边涉及到的两点不在同一集合内,则合并两个集合,否则说明形成环,直接输出结果即可。以下是本人代码:#includ...
阅读全文
摘要:题目大意:在一个n*n的点阵上按顺序添边,到围成环的时候就停止,求添多少条边之后停止,如果添完所有边也不能停止,输出draw。做法:用二维并查集判环,如果当前边涉及到的两点不在同一集合内,则合并两个集合,否则说明形成环,直接输出结果即可。以下是本人代码:#includ...
阅读全文
摘要:测试地址题目大意:有30000艘战舰依次排成30000列,以1~30000编号,有2种操作:1.M i j:将i号战舰所在的列作为一个整体接到j号战舰所在列的尾部。2.C i j:如果i号战舰和j号战舰在同一列,询问它们之间有多少艘战舰,否则输出-1。根据询问给出正确...
阅读全文
摘要:测试地址题目大意:有30000艘战舰依次排成30000列,以1~30000编号,有2种操作:1.M i j:将i号战舰所在的列作为一个整体接到j号战舰所在列的尾部。2.C i j:如果i号战舰和j号战舰在同一列,询问它们之间有多少艘战舰,否则输出-1。根据询问给出正确...
阅读全文
摘要:测试地址题目大意:一个地方的动物分A,B,C三类,A吃B,B吃C,C吃A,两种动物之间要么是同类,要么就有吃与被吃的关系。按顺序给定K句话,描述的是某两种动物是同类或某种动物吃某种动物。求这些话中假话的数量(假话的定义在原题中有)。做法:用f[i]表示i号动物所属集合...
阅读全文
摘要:测试地址题目大意:一个地方的动物分A,B,C三类,A吃B,B吃C,C吃A,两种动物之间要么是同类,要么就有吃与被吃的关系。按顺序给定K句话,描述的是某两种动物是同类或某种动物吃某种动物。求这些话中假话的数量(假话的定义在原题中有)。做法:用f[i]表示i号动物所属集合...
阅读全文
摘要:题目大意:有N种药水,以0~N-1编号,给出若干个配方,格式为A+B=C(即一个A药水和一个B药水可以合成一个C药水),可以从商店里花费一些钱来买药水,每种药水的价格不一定相同,要配出一个0号药水,求最小花费以及能满足最小花费的方案个数。做法:我们可以用Dijkstr...
阅读全文
摘要:题目大意:有N种药水,以0~N-1编号,给出若干个配方,格式为A+B=C(即一个A药水和一个B药水可以合成一个C药水),可以从商店里花费一些钱来买药水,每种药水的价格不一定相同,要配出一个0号药水,求最小花费以及能满足最小花费的方案个数。做法:我们可以用Dijkstr...
阅读全文
摘要:题目大意:有N个城市,它们之间有M条道路相连,可能是单向道路或双向道路。对于同一种商品,在每个城市的价格不一定相同,一个商人在1号城市出发,要走到n号城市,他想在路径中某一个城市买入,并在之后的某一个城市卖出以赚取差价(差价等于卖出的城市中的价格减去买入的城市中的价格...
阅读全文
摘要:题目大意:有N个城市,它们之间有M条道路相连,可能是单向道路或双向道路。对于同一种商品,在每个城市的价格不一定相同,一个商人在1号城市出发,要走到n号城市,他想在路径中某一个城市买入,并在之后的某一个城市卖出以赚取差价(差价等于卖出的城市中的价格减去买入的城市中的价格...
阅读全文
摘要:题目大意:一个有N个点的图,求出图中最小的环的长度,如果没有环则输出“No solution.”。做法:用Floyd求最小环即可。以下是本人代码:#include #include #include #include using namespace std;long ...
阅读全文
摘要:题目大意:一个有N个点的图,求出图中最小的环的长度,如果没有环则输出“No solution.”。做法:用Floyd求最小环即可。以下是本人代码:#include #include #include #include using namespace std;long ...
阅读全文
摘要:题目:点击打开链接做法:用f[i][j]表示在j个盒子里放i个球的方案数,边界为f[0][i]=1,状态转移方程为:f[i][j]=f[0][j-1]+f[1][j-1]+...+f[i][j-1](为什么这样加起来?因为我们可以往第j个盒子里放i~0个球,所以往j个...
阅读全文
摘要:题目:点击打开链接做法:用f[i][j]表示在j个盒子里放i个球的方案数,边界为f[0][i]=1,状态转移方程为:f[i][j]=f[0][j-1]+f[1][j-1]+...+f[i][j-1](为什么这样加起来?因为我们可以往第j个盒子里放i~0个球,所以往j个...
阅读全文
摘要:题目大意:一个正整数,如果它的约数个数比所有比它小的正整数的约数个数都大,则称这个数为反质数,求不超过N(1≤N≤2000000000)的最大反质数。做法:当初一拿到这题瞬间蒙了,不知道这是什么鬼,后来了解约数定理之后发现这就是个裸的DFS啊!约数定理是指,一个数的约...
阅读全文
摘要:题目大意:一个正整数,如果它的约数个数比所有比它小的正整数的约数个数都大,则称这个数为反质数,求不超过N(1≤N≤2000000000)的最大反质数。做法:当初一拿到这题瞬间蒙了,不知道这是什么鬼,后来了解约数定理之后发现这就是个裸的DFS啊!约数定理是指,一个数的约...
阅读全文
摘要:题目大意:给定一棵无根树,每个点有一个颜色,有2种操作:1.将某两点之间路径上的点(包括该两点)的颜色修改为某个颜色。2.询问某两个点之间路径上的连续颜色段的数量。如果一条路径上的点的颜色依次为“1 2 2 3 3 4”,则颜色段的数量为4。如果一条路径上的点的颜色依...
阅读全文
摘要:题目大意:给定一棵无根树,每个点有一个颜色,有2种操作:1.将某两点之间路径上的点(包括该两点)的颜色修改为某个颜色。2.询问某两个点之间路径上的连续颜色段的数量。如果一条路径上的点的颜色依次为“1 2 2 3 3 4”,则颜色段的数量为4。如果一条路径上的点的颜色依...
阅读全文
摘要:题目大意:有一个包含N个数的数列,可以将前面的K(0≤K≤N-1)个数移到数列的后面,形成N个数列,求在这些数列当中,有多少个数列满足:对于所有的i(1≤i≤N),数列的前i个数之和为非负数。做法:首先,将该数列复制一份放在该数列的后面,形成一个长度为2*N的数列,用...
阅读全文
摘要:题目大意:有一个包含N个数的数列,可以将前面的K(0≤K≤N-1)个数移到数列的后面,形成N个数列,求在这些数列当中,有多少个数列满足:对于所有的i(1≤i≤N),数列的前i个数之和为非负数。做法:首先,将该数列复制一份放在该数列的后面,形成一个长度为2*N的数列,用...
阅读全文
摘要:题目大意:一棵有N个点的树,再往里面加入M条新边,现在要破坏其中的两条边,要求一条是原来树中的边,一条是新边,求方案的数量。做法:点击打开链接以下是本人代码:#include #include #include #include #include using name...
阅读全文
摘要:题目大意:一棵有N个点的树,再往里面加入M条新边,现在要破坏其中的两条边,要求一条是原来树中的边,一条是新边,求方案的数量。做法:点击打开链接以下是本人代码:#include #include #include #include #include using name...
阅读全文
摘要:题目大意:有一棵树有N个点,每条边有边权,有4种操作:1.Change i w:将输入的第i条边的权值修改为w。2.Cover u v w:将点u和点v之间路径上的边权都修改为w。3.Add u v w:将点u和点v之间路径上的边权都加上w。4.Max u v:询问点...
阅读全文
摘要:题目大意:有一棵树有N个点,每条边有边权,有4种操作:1.Change i w:将输入的第i条边的权值修改为w。2.Cover u v w:将点u和点v之间路径上的边权都修改为w。3.Add u v w:将点u和点v之间路径上的边权都加上w。4.Max u v:询问点...
阅读全文
摘要:题目大意:有一个长度为N的数列,不断取长度为K的连续区间:[1,K],[2,K+1],...,[N-K+1,N],求出每个区间内的最大值和最小值。做法:这道题使用的是一种叫单调队列的数据结构,具体说明在百科中也有,在这里就不多说了。这道题就是维护两个单调队列maxq和...
阅读全文
摘要:题目大意:有一个长度为N的数列,不断取长度为K的连续区间:[1,K],[2,K+1],...,[N-K+1,N],求出每个区间内的最大值和最小值。做法:这道题使用的是一种叫单调队列的数据结构,具体说明在百科中也有,在这里就不多说了。这道题就是维护两个单调队列maxq和...
阅读全文
摘要:题目大意:有一座城市有N个区域(从0开始编号),每两个区域之间有且只有一条路径相连,有Q个询问,每个询问包含三个整数x,y,z,意为询问连接x,y,z三点的最短路径长度。对于每个询问,给出正确的答案。做法:在模板上进行了一些加强,但是也不难,容易得出:连接x,y,z三...
阅读全文
摘要:题目大意:有一座城市有N个区域(从0开始编号),每两个区域之间有且只有一条路径相连,有Q个询问,每个询问包含三个整数x,y,z,意为询问连接x,y,z三点的最短路径长度。对于每个询问,给出正确的答案。做法:在模板上进行了一些加强,但是也不难,容易得出:连接x,y,z三...
阅读全文
摘要:题目大意:给定一棵有N个节点的有根树,对于每条边,读入两个数,标号为前面那个数的点是标号为后面那个数的点的父亲,在每组测试数据的最后给出两个点,求出它们的最近公共祖先(LCA)。做法:LCA裸题......也可以用倍增写,但是鉴于本人比较懒的缘故,当然是怎么能过就怎么...
阅读全文
摘要:题目大意:给定一棵有N个节点的有根树,对于每条边,读入两个数,标号为前面那个数的点是标号为后面那个数的点的父亲,在每组测试数据的最后给出两个点,求出它们的最近公共祖先(LCA)。做法:LCA裸题......也可以用倍增写,但是鉴于本人比较懒的缘故,当然是怎么能过就怎么...
阅读全文
摘要:题目大意:有一棵树,每条边有边权,有两种操作:1.修改某条边的边权。2.将某两个点之间路径上所有边的边权修改成它的相反数。3.询问某两个点之间路径上的所有边的边权的最大值。对于每个询问,给出正确的答案。做法:一道比较难的树链剖分题,需要注意的是,在用线段树维护时,需要...
阅读全文
摘要:题目大意:有一棵树,每条边有边权,有两种操作:1.修改某条边的边权。2.将某两个点之间路径上所有边的边权修改成它的相反数。3.询问某两个点之间路径上的所有边的边权的最大值。对于每个询问,给出正确的答案。做法:一道比较难的树链剖分题,需要注意的是,在用线段树维护时,需要...
阅读全文
摘要:题目大意:有一棵树,每条边有边权,有两种操作:1.修改某条边的边权。2.询问某两个点之间路径上的所有边的边权的最大值。对于每个询问,给出正确的答案。做法:树链剖分的模板题,注意细节就可以了。(我竟然把query里面的a=f[top[a]]写成了a=top[a],结果做...
阅读全文
摘要:题目大意:有一棵树,每条边有边权,有两种操作:1.修改某条边的边权。2.询问某两个点之间路径上的所有边的边权的最大值。对于每个询问,给出正确的答案。做法:树链剖分的模板题,注意细节就可以了。(我竟然把query里面的a=f[top[a]]写成了a=top[a],结果做...
阅读全文
摘要:题目大意:有一个村庄有n个小屋,小屋之间有道路,每条道路有通过所需的时间,从一个小屋有且只有一条路径到达另一个小屋(也就是一棵树)。有一个人一开始在s号小屋,下面有q个命令,命令分两种:1. 0 u:该人从当前小屋移动到u号小屋,并输出所需的时间。2. 1 i w:将...
阅读全文
摘要:题目大意:有一个村庄有n个小屋,小屋之间有道路,每条道路有通过所需的时间,从一个小屋有且只有一条路径到达另一个小屋(也就是一棵树)。有一个人一开始在s号小屋,下面有q个命令,命令分两种:1. 0 u:该人从当前小屋移动到u号小屋,并输出所需的时间。2. 1 i w:将...
阅读全文
摘要:题目大意:给出一个有N个点,M条边的图,有Q个询问,每个询问包含2个正整数i,j,要求:如果i,j不连通,输出-1,否则,对于它们之间的每条路径,得出该路径上边权的最小值,输出这个最小值的最大值。做法:首先用Kruskal算法求出图的最大生成树,由于图可能不是连通的,...
阅读全文
摘要:题目大意:给出一个有N个点,M条边的图,有Q个询问,每个询问包含2个正整数i,j,要求:如果i,j不连通,输出-1,否则,对于它们之间的每条路径,得出该路径上边权的最小值,输出这个最小值的最大值。做法:首先用Kruskal算法求出图的最大生成树,由于图可能不是连通的,...
阅读全文
摘要:题目:POJ1986做法:一道LCA算法的模板题,比较简单,就不多说了。以下是本人代码:#include #include #include #include #include using namespace std;int n,m,a,b,c,d,tot,first...
阅读全文
摘要:题目:POJ1986做法:一道LCA算法的模板题,比较简单,就不多说了。以下是本人代码:#include #include #include #include #include using namespace std;int n,m,a,b,c,d,tot,first...
阅读全文
摘要:题目大意:给定一片有N个节点的森林,有M条边,每条边有边权。有C个询问,对于每个询问,先判断给出的两点是否连通,如果不连通输出“Not connected”,如果连通则输出两点间路径的边权之和。做法:这道题应该算是HDU2586的加强版,这道题我的博客里也有。大致思路...
阅读全文
摘要:题目大意:给定一片有N个节点的森林,有M条边,每条边有边权。有C个询问,对于每个询问,先判断给出的两点是否连通,如果不连通输出“Not connected”,如果连通则输出两点间路径的边权之和。做法:这道题应该算是HDU2586的加强版,这道题我的博客里也有。大致思路...
阅读全文
摘要:题目大意:给定一棵有N个节点的树,每条边都有边权。有M个询问,对于每个询问,求出它给出的两点之间路径上的边权之和。做法:本题是一道LCA(最近公共祖先)算法的模板题,网上也比较容易查到资料。用dis[i]表示i号节点到树根的距离,那么对于询问(i,j),答案显然是di...
阅读全文

浙公网安备 33010602011771号