洛谷 P3204 [HNOI2010]公交线路】的更多相关文章

题面 luogu 题解 矩阵快速幂\(+dp\) 其实也不是很难 先考虑朴素状压\(dp\) \(f[i][S]\) 表示最慢的车走到了\(i\),\([i, p+i-1]\)的覆盖情况 状态第一位一定是\(1\) 那么显然\(f[i][S] = \sum f[i-1][S']\)(\(S'\)能转移到\(S\)) 什么情况能转移呢? 假如:\(S1->S2\) \(S1\)去掉第一位,再在后面补\(0\),产生的新数和\(S2\)至多只有一个差异 \(n\)很大,所以矩阵优化一下 先把合法的状…
Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距 离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决定按下述规则设计线路: 1.设共K辆公交车,则1到K号站作为始发站,N-K+1到N号台作为终点站. 2.每个车站必须被一辆且仅一辆公交车经过(始发站和 终点站也算被经过). 3.公交车只能从编号较小的站台驶往编号较大的站台. 4.一辆公交车经过的相邻两个 站台间距离不得超过Pkm. 在最终设计线路之…
洛谷题目传送门 关于LCT的问题详见我的LCT总结 思路分析 首先分析一下题意.对于每个弹力装置,有且仅有一个位置可以弹到.把这样的一种关系可以视作边. 然后,每个装置一定会往后弹,这不就代表不存在环么? 于是,一个森林的模型被我们建出来了. 考虑到有修改弹力值的操作,也就是要断边和连边,于是用LCT维护. 思路一 每一个点向它弹到的位置连边.如果被弹飞了,那么这条边就不存在. 查询弹飞的步数,就是查询该点到其所属原树中根节点的路径的\(size\). 注意此题的一些特性.我们并不需要查询或者更…
题面 Bzoj 洛谷 题解 大力分块,分块大小\(\sqrt n\),对于每一个元素记一下跳多少次能跳到下一个块,以及跳到下一个块的哪个位置,修改的时候时候只需要更新元素所在的那一块即可,然后询问也是\(\sqrt n\)的模拟. #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using std::min; using std::max; using st…
洛谷 不知道大家做没做过传球游戏,这一题和传球游戏的转移方程几乎一样. 令\(A\)为\(1\)点,\(E\)为\(5\)点,那么\(f[i][j]\)代表第i步走到j的方案数. \[f[i][j]=f[i−1][j+1]+f[i−1][j−1]\] 因为题中给的是一个环,所以有几种情况. \[if(j==8)~f[i][j]=f[i−1][1]+f[i−1][7]\] \[if(j==1)~f[i][j]=f[i−1][8]+f[i−1][2]\] 还有,因为题中说,到了\(E\)点,就不会再…
Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距 离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决定按下述规则设计线路: 1.设共K辆公交车,则1到K号站作为始发站,N-K+1到N号台作为终点站. 2.每个车站必须被一辆且仅一辆公交车经过(始发站和 终点站也算被经过).  3.公交车只能从编号较小的站台驶往编号较大的站台.  4.一辆公交车经过的相邻两个 站台间距离不得超过Pkm. 在最终设计线…
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<=2000),并已知任何两个人的身高都不同.假定最终排出的队形是A 个人站成一排,为了简化问题,小A想出了如下排队的方式:他让所有的人先按任意顺序站成一个初始队形,然后从左到右按以下原则依次将每个人插入最终棑排出的队形中: -第一个人直接插入空的当前队形中. -对从第二个…
某旅游区的街道成网格状.其中东西向的街道都是旅游街,南北向的街道都是林阴道.由于游客众多,旅游街被规定为单行道,游客在旅游街上只能从西向东走,在林阴道上则既可从南向北走,也可以从北向南走. 阿龙想到这个旅游街游玩,他的好友阿福给了他一些建议,用分值表示所有旅游街相邻两个路口之见的街道值得游览的程度,分值是从-100到100的整数,所有林阴道不打分.所有分值不可能全是负分.如图: 输入输出格式 输入格式: 输入文件的第一行是两个整数m和n,之间用一个空格隔开,m表示有m条旅游街(1≤m≤100 )…
P3203 [HNOI2010]弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞.绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞.为了使得游戏更有趣,Lostmonkey可以修改某个弹力装置的弹力系数,任何时候弹力系数均为…
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<=2000),并已知任何两个人的身高都不同.假定最终排出的队形是A 个人站成一排,为了简化问题,小A想出了如下排队的方式:他让所有的人先按任意顺序站成一个初始队形,然后从左到右按以下原则依次将每个人插入最终棑排出的队形中: -第一个人直接插入空的当前队形中. -对从第二个…
luogu传送门 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 16082  Solved: 8241[Submit][Status][Discuss] Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装…
题目传送门 先解释一下数组的意义: d[i]表示公交车从第i个点到第i+1个点需要的时间 pas结构体中:t表示这个乘客到公交站牌的时间,u表示起点,v表示终点 wait[i]表示公交车在第i个站点等待的时间 arr[i]表示到达公交车每个点的时间 reach[i]表示对于每一个点如果用加速器最多可以影响到哪一个点的乘客 sum[i]用来处理前缀和,表示从第一个点到当前点的所有乘客数量之和 解题思路: 先考虑没有加速器的情况,这时可以得到公交车到达每个点的时间 就是公交车到达前一个点的时间和乘客…
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2.3 .4 ……n 号景点.从第 i 号景点开到第 i+1 号景点需要 Di 分钟.任意时刻,公交车只能往前开,或在景点处等待. 设共有m 个游客,每位游客需要乘车1 次从一个景点到达另一个景点,第i 位游客在Ti 分钟来到景点 Ai ,希望乘车前往景点Bi (Ai<B i ).为了使所有乘客都能顺…
首先用一波神奇的操作,平面图边数m<=3*n-6,直接把m降到n, 然后对于冲突的边一条环内,一条环外,可以用并查集或者2Sat做, 当然并查集是无向的,2Sat是有向的,显然用并查集比较好 复杂度大概是O(T*n*n) #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define pb push_back #define pii pair<int…
题目描述 若能将无向图G=(V,E)画在平面上使得任意两条无重合顶点的边不相交,则称G是平面图.判定一个图是否为平面图的问题是图论中的一个重要问题.现在假设你要判定的是一类特殊的图,图中存在一个包含所有顶点的环,即存在哈密顿回路. 输入输出格式 输入格式: 输入文件的第一行是一个正整数T,表示数据组数(每组数据描述一个需要判定的图).接下来从输入文件第二行开始有T组数据,每组数据的第一行是用空格隔开的两个正整数N和M,分别表示对应图的顶点数和边数.紧接着的M行,每行是用空格隔开的两个正整数u和v…
由数据范围容易想到矩阵快速幂和状压. 显然若要满足一辆公交车的相邻站台差不超过p,则每相邻p个站台中每辆车至少经过一个站台.可以发现这既是必要的,也是充分的. 开始的时候所有车是相邻的.考虑每次把一辆公交车塞到前方第一个未到达的站台.这个时候公交车之间是没有区别的,因为只要保证每相邻p个站台每辆车都出现也即有k辆车就可以了. 于是设f[i][j]为i-p+1~i的车站停靠状况为j的方案数.并且表示i站台状况的这一位必为1,j中一共有k个1.于是状态数至多有C(9,4)=126种.转移比较显然,只…
SB贪心......暴露了我代码能力巨弱的本质. 题面 解:首先我们应该想到DP(但是我想到了贪心......) 然后分析题目本质,每个点有个限制,最早开走时间不得早于最晚上车时间. 然后我们就可以把每个人看做都在那个时间上车. 然后我们发现,对一个地方使用加速,会影响它后面一段区间. 然后就有个暴力·雏形是枚举在某个点用加速,看它能够减少的时间,取最大的那个用. 然后看一眼数据范围,大概是n²,可以过,只要你每次找到收益最大的点是O(n)即可. 然后发现好难写,细节巨多无比......一直觉得…
正解:贪心 解题报告: 这里是链接! 唔我觉得还是很容易想到是贪心的,这个难就难在怎么贪心 下面列一下常见的几个贪心思想: 1)根据车上的人数排序,人最多的那条路用加速器 错误,人数多并不意味着加速的贡献就大,很容易举反例,比如车上有100个人都是在A站上车,50人在B站下车50人在C站下车,然后B站有个人来得比车晚,那根据这个理论的话我们要在AB路上加速对吧?但这显然是错的啊!AB上加速完全没意义欸! 2)恩忘了……好像还有个小胖子想了个比较离谱的贪心但是我忘了TT算了就这样吧你知道有好几个错…
题目 发现\(n\)比较大,但是\(k,p\)都很小,考虑矩乘使得复杂度倾斜一下 发现所有车的最大间隔都是\(p\),还保证\(k<p\),于是我们可以考虑压下最后\(p\)位的情况 于是设\(dp[i][S]\)表示目前最远的车来到了\(i\)位置,最后\(p\)为是否有车的状态是\(S\),\(0\)表示没车,\(1\)表示有车 转移的话我们就使得某一辆车提前就好了,注意如果\(i-p+1\)有车的话,提前的只能是这辆车了 代码 #include<cstdio> #include&l…
题目传送门 弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞.绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞.为了使得游戏更有趣,Lostmonkey可以修改某个弹力装置的弹力系数,任何时候弹力系数均为正整数. 输入输出格…
题目链接 题解 区间dp \(f[i][j]\)表示i~j区间最后一次插入的是\(a[i]\) \(g[i][j]\)表示i~j区间最后一次插入的是\(a[j]\) 然后就是普通区间dp转移 Code #include<bits/stdc++.h> #define LL long long #define RG register inline int gi() { bool f = 0; char c = getchar(); RG int x = 0; while (c!='-' &…
题目大意:有$n$个节点,第$i$个节点有一个弹力系数$k_i$,当到达第$i$个点时,会弹到第$i+k_i$个节点,若没有这个节点($i+k_i>n$)就会被弹飞.有两个操作: $x:$询问从第$x$个节点开始要多少次会被弹飞 $x,y:$把第$x$个点的弹力系数修改为$y$. 题解:建一个节点标号$n+1$,所有大于$n$的位置都连向这,表示会被弹飞.其他每个节点向会被弹到的节点连边($i->k_i+i$),发现这样会构成一棵树. 询问就是问该点的深度(到$n+1$的距离).修改就是把原来…
标签:状态压缩+矩阵快速幂. 题解: 首先看范围,p<=10,那么我们可以想到状态压缩.我们把从一个长度为10的区间进行压缩,1代表可以,那么当值一个区间的1的个数为k个,我们就认为他是合法的.要注意这里所定义的区间,是有起点的,但是没有记下来,因为没有必要.然后我们就可以想一下状态是怎么转移的.那么可行的状态有多少种呢?C(9,4)种. 然后两种状态是否能够转移是需要我们判断的,我们每次转移时只能移动一个公共汽车,并且是移动最前面的汽车,这样就可以避免重复统计的情况了前面说道区间是有起点的,那…
传送门 看到哈密顿回路就被吓傻了……结果没有好好考虑性质…… 首先,平面图有个性质:边数小于等于$3n-6$(我也不知道为啥),边数大于这个的直接pass 然后考虑原图,先把哈密顿回路单独摘出来,就是一个环.对于每一条不在哈密顿回路上的边,有两种可能,一种是在环内,一种是在环外 我们用点来表示每一条边,把每一个点拆成两个分别表示这条边是在环内还是环外.对于两条边$i,j$,如果他们同时在环外或环内会交叉,那么就相当于有了约束条件,转化成一个2-SAT问题即可 至于连边,我们设$i$表示在环内,$…
题目:https://www.luogu.org/problemnew/show/P1315 问题是想不明白改动一条边会对后面造成怎样的影响: 实际上影响的会是一段,当某个车站出发时间受其来人牵制时,前面的时间减小就不会起到效果: 所以对于每个车站,求一个 g[i] 表示最远能影响到哪个车站,则修改 i 后面那条边,所有到达点在 i ~ g[i] 的人的时间都缩短1: 每次找一个缩短最大的边,然后重新计算每个车站的实际到达时间和 g[i],其实就是贪心. 代码如下: #include<iostr…
看来这个lct板子的确没什么问题 好像还可以分块做 #include<cstdio> #include<algorithm> using namespace std; typedef long long LL; namespace LCT { struct Node { Node *ch[],*fa; bool rev; LL sz; void upd() { sz=(ch[]?ch[]->sz:)+(ch[]?ch[]->sz:)+; } void pd() { if…
[题解] 这道题可以用Link-Cut Tree写.. 首先建立一个虚拟节点N+1,$i$与$N+1$连边表示$i$被弹飞了 对于修改操作,先$cut(i,min(n+1,i+k[i]))$,然后再$link(i,min(n+1,i+newk))$ 对于询问操作,先$makeroot(x)$,然后$splay(n+1)$,$access(n+1)$,那么答案就是$size[n+1]-1$ #include<cstdio> #include<algorithm> #define N…
我们只需将序列分成 n\sqrt{n}n​ 块,对于每一个点维护一个 val[i]val[i]val[i],to[i]to[i]to[i],分别代表该点跳到下一个块所需要的代价以及会跳到的节点编号.在查询时,我们最多会跳 n\sqrt{n}n​ 块,修改的时候将节点所在区间暴力修改即可. Code: #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int ma…
题意简述 有n个点,第i个点有一个ki,表示到达i这个点后可以到i + ki这个点 支持修改ki和询问一点走几次能走出所有点两个操作 题解思路 分块, 对于每个点,维护它走到下一块所经过的点数,它走到下一块到的店的编号 每次修改只会对这块左端点到这个点产生影响 代码 #include <cmath> #include <cstdio> using namespace std; struct Point{ int k, s, x, num; }p[200010]; int n, m,…
神仙题 题目大意: 有一张\(n\)个点\(m\)条边的无向联通图,每次修改一条边的边权,问每次修改之后这张图的最小生成树权值和 话说是不是\(cdq\)题目都可以用什么数据结构莽过去啊-- 这道题目确实是\(cdq\)好题 \(cdq\)分治一定要处理多维偏序问题吗?并不是,它的核心思想是一个用子问题计算对另一个子问题的贡献 我们将这道题按照时间轴来分治,那么显然一个子问题对另一个子问题是存在贡献的 我们将整张图上的边进行分类: 在当前分治区间内涉及到修改的边称为动态边 其他边称为静态边 我们…