[BZOJ4382][POI2015]Podział naszyjnika Description 长度为n的一串项链,每颗珠子是k种颜色之一. 第i颗与第i-1,i+1颗珠子相邻,第n颗与第1颗也相邻.切两刀,把项链断成两条链.要求每种颜色的珠子只能出现在其中一条链中.求方案数量(保证至少存在一种),以及切成的两段长度之差绝对值的最小值. Input 第一行n,k(2<=k<=n<=1000000).颜色从1到k标号.接下来n个数,按顺序表示每颗珠子的颜色.(保证k种颜色各出现至少一次…
一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 1706 Solved: 651 [Submit][Status][Discuss] Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3211 题意概括 有n个数形成一个序列. m次操作. 有两种,分别是: 1. 区间开根(取整) 2. 区间求和 题解 这题做法大概我知道的有两种,一种是线段树,一种是并查集+树状数组. 两者都基于一个事实:任何一个数被开根很少的次数就变成1了,然后不变了.所以我们可以暴力解决这个开根的问题. 线段树就打一下lazy标记就可以了. 这里主要讲并查集和树状数组怎么做. 树状数组维护前缀和. 并查集的作…
hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 思路: 对于一颗树来说,其实就是统计u到v路径上白边的个数, 加边就是将u到v的路径上所有边都染黑,查询就是查询路径上白边的个数 由于树上每条边最多只会被修改一次,所以可以并查集暴力修改,每个点u指向祖先结点第一条白边的位置. 涂黑白边的操作对应点的子树的答案减一,可以用dfs序树状数组维护 所以…
题目描述 Informatik verbindet dich und mich. 信息将你我连结. B君希望以维护一个长度为n的数组,这个数组的下标为从1到n的正整数.一共有m个操作,可以分为两种:0 l r表示将第l个到第r个数(al,al+1,...,ar)中的每一个数ai替换为c^ai,即c的ai次方,其中c是输入的一个常数,也就是执行赋值ai=c^ai1 l r求第l个到第r个数的和,也就是输出:sigma(ai),l<=i<=rai因为这个结果可能会很大,所以你只需要输出结果mod…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 Problem Description Given an undirected connected graph G with n nodes and m edges, with possibly repeated edges and/or loops. The stability of connectedness between node u and node v is defined by…
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=30&page=show_problem&problem=2731 题意:有t组测试数据,第一个是n,代表有n个城市,标号为0~~n-1,接下来的n行,依次是标号为0~~n-1个城市的坐标,然后有m个操作,road操作代表着将两个点联通,line操作代表询问,直线y=c穿过多少个州,这些州总共有多少个城市…
[BZOJ3211]花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 41 100 5 551 1 22 1 21 1 22 2 31 1 4 Sample Output 1011111 题解:网上好多题解说线段树,感觉树状数组+并查集就可以啊! 易知一个数只要开log(log(n))次平方就会变成1或0,所以我们用并查集维护没有变成1或0的点,修改的时候暴力修改那些没有变成1或0的点,用树状数组更新前缀和…
题意 给定一个无向图(N<=10000, E<=500000),定义f[s,t]表示从s到t经过的每条路径中最长的边的最小值.Q个询问,每个询问一个t,问有多少对(s, t)使得f[s, t] >= t((s,t)和(t,s)是两对) 思路 按边权从小到大排序.考虑从小到大往图中加边同时计算以加入的边为f值的点对数. 难点和重点在于用并查集维护边的连通情况. 对于新加入的边(u, v),如果u,v原来便连通,则没有以该边为f值的点对,因为它一定不是最小边. 而如果(u, v)不连通,就可…
题目链接: Hdu 5458 Stability 题目描述: 给出一个还有环和重边的图G,对图G有两种操作: 1 u v, 删除u与v之间的一天边 (保证这个边一定存在) 2 u v, 查询u到v的路径上有几条桥. 解题思路: 这个题目有很多次操作,包含查询和删边两类,首先想到的是连通分量加缩点.如果按照顺序来,删边时候求桥就是问题了.所以可以离线处理,然后一边记录答案一边加边缩点. 对于一个图,把连通分量缩成一个点后,这个图就成为了一棵树, 然后深度差就等于桥的数目.查询的时候对于(u, v)…
背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作. 第三分钟,k说,要能查询,于是便有了求一段数的和的操作. 第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围. 第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制. 第六分钟,和雪说,要省点事,于是便有了保证运算过程中及最终结果均不超过64位有符号整数类型的表示范围的…
给定N个点的坐标,代表N各城市,有M种操作,共分两种,一种是连线,把两个点连起来(一旦构成连通图,这个连通图即为一个州),还有种询问操作,为y=c,(c为小数部分恒为.5的实数),问y=c这条线经过了多少个大周,这些州总共有多少个城市 很明显要用到并查集,比较好的做法是把并查集落实到线段树上,并查集维护的是每个集合的最大y和最小y,以及rank表示集合数目.但是线段树要用到离散化. 然后参照一个用树状数组的博客,其实思路差不多,都是把每次的变更落实到树上 不过这个树状数组跟之前写的不一样,这个是…
Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1 1 4 Sample Output 101 11 11 [分析] 开始看一眼觉得线段树可做. 后来看题解用树状数组瞬秒......orzzz,注意到任何一个int都可以在很小的次数下变为1,所以直接暴力单点修改,将变成1的数parent设为它右边的数. 注意,输入中可能会有很多的0..…
题解:同 BZOJ 3211 花神游历各国,需要注意的是需要开long long,还有左右节点需要注意一下. #include <cstdio> #include <cmath> #include <iostream> #include <algorithm> using namespace std; typedef long long LL; LL a[100005],c[100005]; int f[100005],n,m,op,l,r,t; int s…
对于每种颜色,可以发现可以切的位置被分割成了若干段独立的区域. 给每个区域一个编号,将$m$种颜色的情况当成字符串来看,如果两个切口的字符串完全匹配,那么可以在这里切两刀. 可以构造hash函数,通过差分前缀和做到$O(n)$修改. 然后对于每一种相同的hash值,将切口按位置从小到大排序,通过组合数计算方案数,再通过双指针计算最小差值. 时间复杂度$O(n\log n)$. #include<cstdio> #include<algorithm> #define N 100001…
[问题描述]    长度为n 的一串项链,每颗珠子是K 种颜色之一.第i 颗与第i-1,i+1 颗珠子相邻,第n 颗与第1 颗也相邻.    切两刀,把项链断成两条链.要求每种颜色的珠子只能出现在其中一条链中.    求方案数量.[输入]    输入文件名为(neck.in).    第一行两个数n,K.    第二行n 个数,第i 个数代表第i 颗珠子的颜色.[输出]    输出文件名为(neck.out).    一行一个数表示答案.[样例输入] neck.in     4 3    1 2…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. 每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔. 妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置. 一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置. Mary决定从现有的高塔中移走一些,使得有最多的积木在正确的位置. 请你输出最优答案 [题解] 我们发现…
题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置.一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置.Mary决定从现有的高塔中移走一些,使得有最多的积木在正确的位置.请你告诉Mary她应该移走哪些积木. 输入 第一行为一个数n,表示高塔的初始高度.第二行包含n个数a1,a2,...,an,表示从下到上每个积木上面的数. 输出 注意:请…
题目描述 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻.他决定玩这样一个游戏. 它可以发两种命令: 1. Merger(i, j).把i所在的团和j所在的团合并成一个团.如果i, j有一个人是死人,那么就忽略该命令. 2. Kill(i).把i所在的团里面得分最低的人杀死.如果i这个人已经死了,这条命令就忽略. 皇帝希望他每发布一条kill命令,下面的将军就把被杀的…
The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8807   Accepted: 2875 Description Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is really huge, Newman wants to g…
传送门 The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8690   Accepted: 2847 Description Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is really huge, Newman wants…
题解:首先,单点修改求区间和可以用树状数组实现,因为开平方很耗时间,所以在这个方面可以优化,我们知道,开平方开几次之后数字就会等于1 ,所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字进行开平方,至于这个数组,可以用并查集维护. #include <cstdio> #include <cmath> #include <iostream> using namespace std; typedef long long LL; LL c[100005]; in…
考试的时候用了两个树状数组去优化,暴力修改,树状数组维护修改后区间差值还有最终求和,最后骗了40分.. 这道题有好多种做法,求和好说,最主要的是开方.这道题过的关键就是掌握一点:在数据范围内,最多开方五六次就会变成1,这样以后再修改就不用修改了. ①  线段树打标记 ②  分块打标记 ③  树状数组+并查集 因为我考试的时候用的树状数组,所以直接打的第三种,相对来说代码量也少一些. 思路:开始时父亲都指向自己,如果变成1,就把父亲指向下一个位置即可.修改的时候相当于跳着修改.代码当中会有注解.…
1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游戏里面有n个城市和m条双向的道路.城市从1到n编号.对于每一对城市,他们之间要么有唯一的一条道路,要么就是不可互达.一条道路的定义是一个包含不同城市的序列 v1, v2,...,vk ,  vi  和  vi+1 (1≤ i < k)之间有直接的一条道路相连.这条道路的长度是k-1.两个城市在同一区…
此题一看便是RMQ问题,但是由于开平方的特殊操作,tag操作失效 此时发现特性:sqrt最多执行6此便使值到达1/0,此时可以剪枝不进行该操作,利用并查集到达特性找根,根代表还可以进行操作的点,再利用树状数组简单的操作便可以AC #include<bits/stdc++.h> #define rep(i,x,y) for(register ll i=x;i<=y;i++) #define ll long long using namespace std; ; inline ll read…
正解:并查集/树链剖分+线段树 解题报告: 传送门 感觉并查集的那个方法挺妙的,,,刚好又要复习下树剖了,所以就写个题解好了QwQ 首先说下并查集的方法趴QwQ 首先离线,读入所有操作,然后dfs遍历整棵树,如果当前点有标记就fa[i]=i,否则fa指向父亲节点 然后倒叙查答案,每次碰到Q答案就fa[i],碰到C就把修改的那个点的标记次数--,当标记次数=0的时候fa就指向父亲节点辣 over 484很妙昂! #include<bits/stdc++.h> using namespace st…
题目传送门 题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作. 第三分钟,k说,要能查询,于是便有了求一段数的和的操作. 第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围. 第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制. 第六分钟,和雪说,要省点事,于是便有了保证运算过程中及最终结果均不超过64位有符号…
题目 输入格式 输出格式 每次x=1时,每行一个整数,表示这次旅行的开心度 输入样例 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1 1 4 输出样例 101 11 11 数据 对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9 题解 类似于重复开根以及取模之类的操作都有个共性,就是重复取的次数非常少 以本题开根为例,当取到一定次数时,就会变为1 我们用树状数组维护区间和 用并查集维护当前位置往下[包括当前位置],最近…
超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11987 并查集+线段树进行修改与统计 https://vjudge.net/problem/UVALive-4730 线段树 https://vjudge.net/problem/UVALive-4108 暴力 线段树 https://vjudge.net/problem/UVA-12299 树状数…
3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4057  Solved: 1480[Submit][Status][Discuss] Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1 1 4 Sample Output 101 11 11 HINT 对于100%…