自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 问答 (4)
  • 收藏
  • 关注

原创 cf 92D 单调栈 二分

题目链接https://codeforces.com/problemset/problem/92/D题意给n个数,问每个数后最远的比他小的数跟他的距离减1,不存在为-1思路看题钻逆序牛角尖了,仔细分析一下,从后往前看,对于ai和aj,如果i<j但ai>aj,显然ai一点用没有。因为他不可能产生比aj更优的答案。因此从后往前维护一个递减的单调栈,如果当前数字比栈顶小,压栈,答案为-1,否则根据刚刚分析的,它不会令答案更优,直接二分搜它的答案即可,不用压入栈。教训/收获单调栈,单调队列

2021-06-28 20:09:48 473

原创 P3916 scc缩点入门

题目链接https://www.luogu.com.cn/problem/P3916题意有向图,问每个点可达最大节点编号思路如果是树,那么直接树形DP但是是有向图,好吧一个做法是反向建图,从大到小做dfs,很讨巧的方法。这里说下缩点说来惭愧,学了tarjan那几件套都没怎么做过题,一眼没看出来。就是求强连通分量,然后缩点成dag,直接跑树形dp就行了。缩点的操作就是跑出scc数组后,重新建图(原图已经无所谓了),改成sc个点即可。重新建图拿数组存一下边就好了(或者你也可以混用邻接矩阵

2021-06-25 19:58:30 405

原创 cf 708C - Centroids 树的重心 思维 贪心

题目链接https://codeforces.com/problemset/problem/708/C题意给一棵树,你有一次删去任一边,加上任一边(必须维持树结构)的操作机会,问每个点是否可以经过(当然也可以不经过)操作成为重心。思路想复杂了先复习下重心,定义就是题中的,最大子树不超过N/2。重心最少一个,最多为相连两个,所有节点到重心距离和最小。我们考虑两个重心情况,对不是重心的任一点,我们可以断开重心间边,选择这个点和另一侧重心相连,显然全有解考虑单个重心情况,容易想到以下贪心做法:选择

2021-06-25 12:08:14 446

原创 CF gym102411E 多源BFS

题目链接https://codeforces.com/gym/102411/problem/E题意给出一棵树,树上一些点染色,问是否有点到所有染色点距离相等?思路多源->多源转化为单源->多源。我们可以看作是所有染色点连了个虚拟源点(代码里没有体现,但思路是这样的),把虚拟源点扔队列里bfs去。我们维护dep数组存放当前bfs深度,也就是到虚拟源点距离。cnt数组存放当前点’汇集’的染色点的数量vis数组存放是否在队里。我们在BFS过程中,一个点最多可以被找到n次,但因为是

2021-06-24 22:21:32 304

原创 p2014 树形DP 背包问题板子

题目链接https://www.luogu.com.cn/problem/P2014题意给你若干先修课-课程的关系,保证课程最多有一个先修课。每个课有自己的学分,最多选m门,问最大得分。思路容易发现是个树形DP的题目。我们考虑dp[x][i]为x结点最多选i门时最大收益,给出的图是一个森林,不妨建立虚拟源点0,答案即为dp[0][m]。考虑如何转移,树形DP中则为如何统计子树数据得到当前数据。显然,我们是在不同的子树选择一个dp状态相加再加上根节点的值。也就是类似一个分组背包。对于求解每个状态

2021-06-24 17:26:41 232

原创 CF280C 期望的可加性

题目链接https://codeforces.com/problemset/problem/280/C题意给出一有根树,每次等概率删除一个点和其子树,问删完期望步数思路期望是有可加性的,删掉所有节点的期望就是所有节点被删的期望的和。显然一个节点被删的花费是1,但是它能否贡献期望是有概率的,假设他的祖先节点比他先被删除,那么他是不可以产生贡献的,因此我们可以将他的期望看成是这样E(x)={1,x先于祖先被删除0,x后于祖先被删除E(x)=\left\{ \begin{ar

2021-06-24 12:15:02 515

原创 P3478 STA-Station 树形DP 换根法入门

题目链接https://www.luogu.com.cn/problem/P3478题意一颗无根树,找出一根,使其子树到他自己的结点深度和最大思路换根法入门。我们处理无根树时,一般都是需要寻找(指定)一个根节点作为切人点的,比如我们调用dfs常常就是dfs(1,-1)开始,转移是dfs(y,x),人为的设置了树根。但当题目涉及多个树根的操作时,我们如果还是指定树根,显然会出现漏算。这时就需要换根法了,换根法的大概操作流程就是拆分任务,两次扫描。首先扫描出给定一根的一些数据,之后再考虑换掉根时

2021-06-23 21:50:46 339

原创 P6082 树形DP

题目链接https://www.luogu.com.cn/problem/P6082题意一棵树,每个点有收益(可负),经过一点获得其收益(多次经过不重复,一定获得不可放弃),每个点有最大停留次数(最小为2),起点为1,起点收益0,停留无限。问如何游览会最大化收益(可以在起点摸鱼不走)思路树形DPdp[i]代表i为根子树最大收益,首先明确一个点的限制li[i],让他只能前往li[i]-1个子树。而一个点的收益就应当是所有子树中满足限制的最大的正DP值之和。dp[i]=∑1li[i]−1dp[j]

2021-06-23 15:12:40 154

原创 P3574 [POI2014]FAR-FarmCraft 树形DP,贪心

题目链接https://www.luogu.com.cn/problem/P3574题意n点树,树根为1,穿越道路花费时间1,点带权。你需要遍历树,每个点会在被遍历到后执行操作,时间为权(你不需要在那里停留),最终当你回到1点后,你也需要开始执行时间为权的操作,思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...

2021-06-23 12:29:30 212

原创 概率DP算法总结

概率DP顾名思义,概率DP就是动态规划求概率的问题。一般来说,我们将dp数组存放的数据定义为到达此状态的概率,那么我们初值设置就是所有初始状态概率为1,最终答案就是终末状态dp值了。我们在进行状态转移时,是从初始状态向终末状态顺推,转移方程中大致思路是按照当前状态去往不同状态的位置概率转移更新DP,且大部分是加法。期望DP用于求解期望的DP。这类问题一般将dp数组存放的数据定义为到达终态还需要的期望值。那么初值设置就是终末状态期望为0,答案就是初始状态的dp值了。我们在进行状态转移时,一般是从终末

2021-06-22 21:54:43 2719

原创 HDU 4652 Dice 概率DP,推式子

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4652题意询问0mn,1mn。0mn代表m面骰子投出连续n个相同期望次数1mn代表m面骰子投出连续n个各不相同期望次数思路期望DP一卷数列压轴话不多说看图教训/收获TMD代码#include<cstdio>#include<iostream>#include<iomanip>#include<map>#include<unor

2021-06-22 21:24:15 200

原创 HDU4405 期望DP裸题

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4405题意0-n的n+1个点,初始0,每一次会扔骰子,1-6面等概率,扔到几走几步。同时有些地方有飞机道,走飞机道可以直飞(可以连续飞,确保只往后飞),问期望投骰子数思路首先题意似乎有些问题?好像如果有飞机道就一定要走,附一个我刚发的discuss http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=42005&messagei

2021-06-22 16:04:32 147

原创 HDU 4336 期望DP入门题,状压DP

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4336题意开袋有卡()思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片

2021-06-22 15:37:24 247

原创 HDU3853 期望DP入门

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3853题意nm网格,每个点可以花费2进行移动,移动是右,下,原地不懂思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片

2021-06-22 14:44:14 222

原创 P2473 奖励关 状压概率DP求期望

题目链接https://www.luogu.com.cn/problem/P2473题意n轮,m种球,每轮随即一个球,可以接可以不接,接的话需要满足这个球的前置条件(比如3号球接球必须已经接过1,4号这种),然后获得一定分数(可负)。问最佳策略下期望得分思路练了这点DP总算有点眉目了。求期望,并且发现我们前面的操作是有后效性的(我们需要作出吃负分,更新状态的不贪心操作),我们考虑倒推显然我们需要记录当前状态以判断是否能接某个球,考虑状态压缩,某位置为1代表接到过这种球,对于只需要考虑是否接过球

2021-06-22 11:42:04 164

原创 NOIP2016 换教室 概率DP求期望

题目链接https://www.luogu.com.cn/problem/P1850题意v点e边带权无向连通图,给出n个三元组(a,b,p),第i个数对代表第i个时间段,默认要去a,但可以申请(开始前一次性全部申请完成,不允许中途更改申请)去b,且通过申请的概率为p。最多申请m次,问期望路径的最小值是多少。思路概率DP,我们定义dp[i][j][0]为第i阶段,使用了j次机会,本次不选择申请的期望路径,dp[i][j][1]类似,但是是这次选择申请的路径。我们考虑转移方程,求的是期望路径,期望

2021-06-22 10:35:07 214

原创 POJ 3071(Football) 直球概率DP+位运算

题目链接http://poj.org/problem?id=3071题意2^n个球队,n轮比赛,每次比赛是按序号排好,第一打第二,第三打第四,如此。输了直接淘汰,给出任意两支队比赛获胜概率,问最可能夺冠的队伍。思路概率DP,dp[i][j]代表第i只球队撑过了第j轮的概率,对所有dp[i][n]求个max即可。转移方程也好说,是dp[i][j]=dp[i][j−1]∗∑k与j可以对决(dp[k][j−1]∗p[i][k])dp[i][j]=dp[i][j-1]*\sum_{k与j可以对决}(

2021-06-21 22:04:46 301

原创 cf 1520G To Go Or Not To Go? 思维,bfs

题目链接https://codeforces.com/contest/1520/problem/G题意给出网格,格子中有墙。向相邻无墙位置移动花费m,有的位置有权值w,这样的点是传送门,可以从一个传送门传到另一个传送门,花费w1+w2。问左上到右下花费。思路最开始以为是一个裸的最短路,通过技巧将O(n²)边降到O(n)即可。就是每个点向周围可移动连边,建立sp点,每个传送门向他连边权为w,跑最短路即可。正确性没问题,但会MLE(2e7的数组RE,再大一点就MLE,真是麻了)。观察发现,传送门最多

2021-05-11 21:40:06 539 1

原创 2021 MetaCamp 7-5 直径 树的直径,思维

题目链接NOTHING题意给出图的笛卡尔积定义:点集做笛卡尔积,比如我们用数字123代表点集V1,字母abc代表点集V2,那么新图的点集V就是二元组(1,a)(1,b)(1,c)(2,a)…的集合。假如1-2,b-c有边,那么新图的边集就是(1,a)->(2,a),(1,b)->(2,b),(1,c)->(3,c),(1,b)->(1,c)…这样的集合。定义δ(a,b) 为两点最短路, tr(G) 代表图G上任意三元组中3个δ和的最大值给出n棵树,问做笛卡尔积后tr的值

2021-05-08 21:32:24 408 3

原创 P1456 Monkey King 左偏树模板题

题目链接https://www.luogu.com.cn/problem/P1456题意n只猴子有自己的力量值s,对于每个操作 x,y,在x和y猴子的猴群中分别选出力量最大的猴子,将力量值/2,之后将两个猴群合并。如果本来就在一个猴群,输出-1.思路类似并查集的联通属性和合并操作+维护块内最值以及修改=可并堆思路很清晰,对于两个堆,弹出堆顶,处理值,重新合并回去,再合并两个堆就可以了。每次merge用一些中间变量记录堆顶就可以了,但板子里的pop函数是没有返回堆顶的,这个要改一下。代码#i

2021-04-15 22:30:52 321

原创 可并堆/左偏树算法总结

可并堆又名左偏树顾名思义,可并堆是一个可以高效合并的堆结构。它可以在O(logn)的复杂度下实现删除,查找最小值,合并的操作。但注意可并堆的复杂度很假…因为其树高可以被卡到O(n)很多时候会被卡性质dist我们定义左右儿子任一为空的节点为外节点,空节点也是一个外节点。定义某节点dist的值为其子树中外节点到它最近的距离,定义空节点的dist值为-1,显然我们能知道外节点的dist值为0左偏树是这样的一棵树:满足堆的性质,同时任一节点,其左节点的dist大于其右节点的dist,那么我们显然

2021-04-13 22:26:47 235

原创 Codeforces 808F 最大权独立点集,二分

题目链接https://codeforces.com/contest/808/problem/F题意给出n个三元组<p,c,l>,任选若干个,要求符合相加为质数的两个组不能同时选∑p>=k求所有可行选择方法中max{l}最小值思路首先可知答案单调,我们可以二分l来进行处理至于每次处理,条件一中相加为质数的情况其实可以分为两种:1+1和奇数加偶数。对于1+1型,显然我们只能选择一个p最大的1时是最优的,而奇数+偶数这个条件就很有意思了,我们把c按奇偶性划分,对所有不能一

2021-04-08 21:56:20 275

原创 CodeForces-1062E LCA,DFN,RMQ

题目链接https://vjudge.net/problem/CodeForces-1062E题意给出一棵树,编号1-n,每次询问L-R区间点中,删掉一个点后LCA的最小深度(根为0),输出删去的点和深度思路训练的时候只想到了最暴力的O(n²qlog(logn))O(n²qlog(logn))O(n²qlog(logn))的算法。仔细观察,发现一组点的LCA就是dfn最小和最大的点的LCA,那么如果删点,肯定是删去这两个点其中之一。于是我们用线段树维护区间dfn最大最小值,对于每个询问我们处理

2021-04-04 15:13:29 322 1

原创 CF1066F Yet another 2D Walking 思维,最短路,啥b建图

题目链接https://www.luogu.com.cn/problem/CF1066F题意二维地图,起始(0,0),给出若干点,要求遍历每一点,两点距离为曼哈顿距离,点有分层level=MAX(X,Y),遍历下一层的点之前一定要遍历全上一层的点,求最短距离。思路CF分区是个2100分DP,本来不打算补了(丢给队友.JPG)但见到一篇最短路的题解,看完直呼神仙做法,索性补了一下。首先需要发现一个特性,我们对于每一层的点,要想保证这一层走的最优,那么这一层遍历的起点和终点都应该是这一层点的"端点"

2021-04-01 22:37:49 273

原创 洛谷P2962 位运算,meet in middle

题目链接https://www.luogu.com.cn/problem/P2962题意给出n点m边无向图,每一个节点都是开关,触发后会将它自己和所有直接相连节点状态改变(0->1,1->0)。初始全部状态为0,问最少几步全1。n<35思路首先易知任意一个节点最多摁下1次,因为摁下两次相当于没有操作最朴素的方法就是搜索,我们利用二进制数来模拟点开关状态,不用常规的存图方法,我们用数组g记录节点x触发后可以直接改变的点。从1-n枚举每个点开关状态,触发新的点后的状态转移可以用二进

2021-03-27 22:15:30 503

原创 CodeForces - 1497E1 判断完全平方数 质因数分解

题目链接https://vjudge.net/problem/CodeForces-1497E1题意给出数组,让你将他分为连续的ans段,使得每一段数组内的数字两两相乘不出现完全平方数,最小化ans。思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...

2021-03-25 22:42:12 317

原创 CodeForces 1484D Playlist 思维暴力

题目链接https://codeforces.com/problemset/problem/1484/D题意给出一个数组,从1开始循环检查,如果gcd(a[i],a[i+1])=1(若i=n,那么比较a[n]和a[1]),那么就把a[i+1]移除。注意不能连续移除两个元素。问最终移除元素的数量和移除次序思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...

2021-03-23 22:27:51 423

原创 CodeForces 1484C Basic Diplomacy 网络流模板题

题目链接题意某君有n朋友,他需要和她们玩耍m天,每一天都有一些人可以和他玩,某君每天只能选择和一个人玩,如果和一个人玩超过m/2上取整次,就会不高兴,问是否有不会不高兴的选择方案,有的话输出方案思路裸的最大流,建立s,t,日期点,朋友点。s向所有日期连边,权1,对于每一天,将日期点向当天可以游戏的朋友连边,权1,所有朋友点向t连边,权为m/2上取整。跑最大流,如果maxflow和日期数相等,那么就是有方案。至于输出方案,我们跑完dinic后,日期和朋友间连的正向边如果权变成了0,说明这个日期选的是

2021-03-23 21:10:52 292

原创 CodeForces 1482B Restore Modulo GCD,条件结构入门题(误)

题目链接题意给定数组,问是否可把该数组看成a[1]=s%ma[i]=a[i-1]+c%m(i>1)的数组,不可以输出-1,可以的话求出最大化的m,无最大值的话输出0思路稍微推一下式子,得出//答案为0:等差递减,等差递增//答案为-1:不等差递减,不满足最后一种情况的其他情况//有正常答案:a[i+1]-a[i] (>0时)有单个取值diff,所有a[i+1]-a[i] (>0时)+diff的最大公约数比数组任何一个数都大教训/收获出问题了自己造数据!注意边界条件!

2021-03-23 21:03:49 249

原创 2021年度训练联盟热身训练赛第二场 J-Lowest Common Ancestor 进制转换,LCA

题目链接https://ac.nowcoder.com/acm/contest/12794/J题意满二叉树,层序遍历给出编号,多次询问求两点公共祖先。其中点编号以十六进制串给出(1000位),输出也是十六进制思路满二叉树层序遍历的LCA没什么好说的,对于u和v,一直对u和v编号大的除二,直到相等就找到了看到十六进制,加上直接除二这个操作就别考虑十进制数了,用二进制串处理,二进制数除二就是右移,也就是说两个二进制编号的LCA就是他们最长公共前缀。至于十六进制和二进制转换,直接看代码吧复杂度O

2021-03-14 17:49:46 210

原创 CF 1490G - Old Floppy Drive 思维,二分

题目链接https://codeforces.com/problemset/problem/1490/G题意给定数组a(如1,2,2,3),构造一个A数组,为a数组的循环拼接(如1,2,2,3,1,2,2,3…)。m个询问,对于每个询问q,输出最小的i,使得A数组前i+1个数字的和大于等于q思路我们需要如下几个数组sum:a的前缀和max_:a前缀和的最大值易知max_数组单调不降,可用二分搜索。在某一次询问q中,如果q<=max_[n],那就是说答案比n小,我们在max_数组二分查

2021-03-05 18:38:16 237

原创 上取整除法小技巧

n/m上取整==(n-1)/m +1证明在此不表

2021-03-05 17:58:24 339

原创 应对unordered_map被卡的方法

昨天做题的时候用unordered_map一直TLE,改用离散化过了。今天去cf题解下面翻评论区发现map能过。了解之后知道unordered_map可以被卡哈希卡到O(n²)。解决办法的话有一个自定义hash函数,这里放上大佬连接添加链接描述具体用法是添加头文件#include<chrono>加入如下代码块struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97

2021-03-05 17:39:08 2072 3

原创 codeforces 431C - k-Tree 简单DP

题目链接https://codeforces.com/problemset/problem/431/C题意满k叉树,每一个节点边权依次为1-k,求起点为根,长为n,存在大于等于d的边权边的路径数思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...

2021-01-05 22:03:34 316

原创 图的连通性相关总结:强连通,双连通,割点割边,2-sat

刚学完了连通性相关的知识,总结一下以下均使用tarjan算法强联通分量定义强连通分量即强联通子图,一般我们都在有向图中求取最大强连通分量,即一张图中任两点可达的最大子图。其中单独一个点也是强联通子图。算法在这里我们使用tarjan算法,维护两个栈,系统堆栈(递归隐式使用),连通子图堆栈。维护两个数组,dfn时间戳数组和low最小可达(自己取的名字)数组。算法过程如下:对每一个联通块调用tarjan函数,他的运行和dfs类似,会给访问到的节点打上时间戳,并把所有经过节点加入栈中。同时维护low

2020-12-29 11:58:00 793

原创 2020ICPC·小米 网络选拔赛第一场 Router Mesh

题目链接https://ac.nowcoder.com/acm/contest/7501题意求出图中删去每个点后联通块数目思路tarjan算法求割点修改维护dfn和low数组,对于边u-v,如果low[v]>=dfn[u],说明只可以通过u到达v,u是割点,删除u会增加一个连通数,那我们记录增加的连通数个数,记为tmp。当u不是树根时,删点后父亲也是一个分量,那么删去后联通块数目从1变到了tmp+1,如果是树根,则是从1变到了tmp。我们记变成的联通块个数为ans。那么对于删去的每个点,联

2020-12-28 11:40:09 222 1

原创 cf1440D Graph Subset Problem 图论 (拓扑序),邻接表二分查找边

题目链接https://codeforces.com/problemset/problem/1440/D题意给出一张图,问是否出现大小为K的强联通子图K个节点具有K个以上邻居的点集思路第二种最好求,利用拓扑排序思路,所有度小于k的点入队,挨个删点,更新度数,直到队空,如果没入队的节点数大于等于k,那么存在第二类。第一种较麻烦,大小为k的子图每个节点度数一定为k-1,子图是原图不断删点生成的,这个过程正好是第二种求取过程。在队列每次取出点时,如果其度数是k-1,就将它所有邻居(已经入队并且

2020-11-29 14:52:50 279

原创 codeforces1422D Returning Home 最短路 思维建图

题目链接https://codeforces.com/contest/1422/problem/D题意n*n网格,m个特殊点,和特殊点x或y坐标相同的点可以直接传送到特殊点,人物移动只能上下左右,给出起始点终止点坐标,保证起始点终止点不是特殊点,求最短距离思路最短路,难点在于建图。思路和HDU - 4725 相当接近。我们无法处理m²级别的边,但每一个特殊点可以和同一行或者同一列的点传送,那么我们可以为每一个节点建立一个x轴对应点和一个y轴对应点。1e5的点处理后最多变成3e5。我们将特殊点和

2020-11-29 13:25:54 289

原创 POJ - 1734 D - Sightseeing trip 最小环路径输出模板题

题目链接https://vjudge.net/problem/POJ-1734/origin题意求最小环输出路径思路上次偷懒没学最小环路径输出,这次栽了。。回顾弗洛伊德最小环floyd外层k循环时,得到的dis[i][j]是只使用1—k-1的节点连接的i-j最短路,那么枚举i和j,k—i---(i-j最短路径)—j---k就是只使用前k个点的所有最短路,枚举到n即可。注意我们k—i---(i-j最短路径)—j---k中,i-j最短路径是跑出的dis数组的值,而k-i和j-k都是原来的路径,所以

2020-11-28 22:15:54 158

原创 Number of Simple Paths CodeForces - 1454E 图论,简单路径数

题目链接https://vjudge.net/problem/CodeForces-1454E题意n点n边,保证联通,求简单路径数(1-3-2和1-2-3算两条,1-2-3,和3-2-1算一条)思路n点n-1边即可联通,多加一边则必有且仅有一环。这时我们可以将图看作一个环加上各个环点为根延伸出了子树。所有简单路径可以统计任意两点间的路径数再加和。分析两点u和v的情况:u和v都在环上:则u-v路径有两条u或v在环上,另一点在该点环外子树上:路径仅一条u或v在环上,另一点在环外不是该点子

2020-11-27 13:53:11 414

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除