摘要: 题目在这里! 题意 给你一个图,有些点上有权值,只能从有权值的点出发,问遍历这个图经过的结点权值和最小是多少 题解 我们先想一想,什么情况是不可能遍历完的呢? 要考虑这个问题,最好的方法就是看一看一些特殊的点。 我们发现:若一个入度为0的点没有权值,则她一定不会被遍历到(显而易见) 所以我们只需判断 阅读全文
posted @ 2020-04-04 18:21 ajthreac 阅读(127) 评论(1) 推荐(0) 编辑
摘要: 注意:本文仅为作者在算法竞赛中的码风,可能不够易读,您无需也不应学习此种码风。 感觉自己的码风还是比较独特的,特此记录一下。 ——\(2020.4.4\) Update \(2022.11.20\): 微调。 Update \(2022.7.16\): 微调。 Update \(2022.3.31\ 阅读全文
posted @ 2020-04-04 16:40 ajthreac 阅读(1006) 评论(2) 推荐(2) 编辑
摘要: 终于发现在哪里启用$Markdown$和$\LaTeX$了… 什么是主席树 主席树的全名是可持久化线段树,从名字就可以看出来,它很持久 是一种可以回退到任意历史版本的神器! 如何实现主席树 主席树的功能看起来很美妙,那我们怎么实现呢? 既然要记录历史版本,那我们把历史版本都存下来不就完了? 呵,天真 阅读全文
posted @ 2020-04-04 14:01 ajthreac 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 先上题 这道题乍一看毫无头绪,其实找到了切入点就很简单了 我们发现,所有可用的配对是可以预处理出来的!!!(显然) 于是我们可以排一遍序,统计一个数两边的数,然后把较小的配对记录下来 注意:如果左右相等需要都记录,必须是两个if,不能顺手打成else if(具体看代码) 那么询问如何处理呢? 我们显 阅读全文
posted @ 2020-03-23 21:45 ajthreac 阅读(358) 评论(1) 推荐(0) 编辑
摘要: 题目戳此 一个比较毒瘤的DP题。 设f[i][j][1/0]为前i个时段、申请j次、第i个时段申请成功与否 思考下面几种情况: 一:i未申请f[i][j][0] (1)i-1申请 1.i-1申请成功 2.i-1申请失败 (2)i-1未申请 二:i申请f[i][j][1] (1)i-1申请 1.前后均 阅读全文
posted @ 2020-02-21 19:47 ajthreac 阅读(137) 评论(1) 推荐(0) 编辑
摘要: 题目戳这里 平衡树的题第一次一遍过,写篇博客庆祝一下,顺便加深一下印象 这道题要求我们支持任意插入 可以用Splay做,具体做法如下: 设要插入到第k个节点后, 则先将k旋至根,再将k-1旋至k的左儿子, 可以发现,此时k-1的右儿子是空的,我们将新节点插在这里就可以满足题意 Code: 1 #in 阅读全文
posted @ 2020-02-13 20:18 ajthreac 阅读(186) 评论(1) 推荐(0) 编辑
摘要: 我不是题目 刚学了A*很开心于是马上码了人生中第三道紫题 主要思想是令目标函数f=g+h 其中g为已求出的,h为还要走的 主要思想就是找出一个玄学的估价函数h*,使h*<h 这样就可以通过h*的大小直接剪枝,这里的h*显然可以设为从终点出发的最短路 A*的流程大致是这样的: 1.建反向图 2.对终点 阅读全文
posted @ 2020-02-01 11:15 ajthreac 阅读(179) 评论(1) 推荐(0) 编辑
摘要: 题目 这道题让我们求最小限重的最大值 显然可以先求出最大生成树,然后在树上进行操作 因为如果两点之间有多条路径的话一定会走最大的,而其他小的路径是不会被走的 然后考虑求最小权值 可以采用倍增求LCA,预处理时顺便把最小权值求出来 Code: 1 #include<bits/stdc++.h> 2 # 阅读全文
posted @ 2019-12-22 16:55 ajthreac 阅读(226) 评论(1) 推荐(0) 编辑
摘要: 这是题目吗? 显然的DP,讲几个重要的地方 1.贪心:让吃饭时间长的先排队(证明从略) 2.状态: f[i][j][k]代表前i个人,一号时间j,二号时间k显然MLE 所以压缩成f[i][j]代表前i个人,一号时间j,用前缀和维护时间,s[i]-j就是二号的时间 Code: 1 #include<b 阅读全文
posted @ 2019-12-14 20:13 ajthreac 阅读(277) 评论(1) 推荐(0) 编辑
摘要: 别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如果被加过了就在前面去掉 具体看代码(题目毒瘤导致卡常卡了好几遍): 1 #include<bits/ 阅读全文
posted @ 2019-12-05 20:47 ajthreac 阅读(147) 评论(1) 推荐(0) 编辑
摘要: 题目戳我 很明显的这题是一道dp,主要讲一下几个细节 1.初始化 我们需要初始化边界情况也就是一个字符串为空的情况 # # # # A:aaaaaa A:□□□□□□ B:□□□□□□ or B:bbbbbb # # # # 这时f[i][0]=i*k,f[0][j]=j*k。 另外注意都为空也就是 阅读全文
posted @ 2019-11-08 17:21 ajthreac 阅读(176) 评论(1) 推荐(0) 编辑
摘要: 这道题可以用各种算法踩掉,我选择的是SPFA。 因为题目要求计数,所以我们开一个ans数组表示数量。 分两种情况讨论: 一:dis_v>dis_u+1 最短路被更新了,可以直接ans_v=ans_u覆盖。 二:dis_v==dis_u+1 又找到一条最短路,将条数相加即可。 具体看代码: #incl 阅读全文
posted @ 2019-11-04 19:26 ajthreac 阅读(143) 评论(1) 推荐(0) 编辑
摘要: 这是一道还算简单的树型dp。 转移方程:f[i]=max(f[j],0) 其中i为任意非叶节点,j为i的一棵子树,而每棵子树都有选或不选两种选择 具体看代码: #include<bits/stdc++.h> using namespace std; int n; struct Edge { int 阅读全文
posted @ 2019-11-04 18:34 ajthreac 阅读(206) 评论(1) 推荐(0) 编辑
摘要: 这道题的关键是利用Floyd算法的性质求转换方案,算是Floyd的一个变形,具体可以看代码。 题目 1 #include<bits/stdc++.h> 2 using namespace std; 3 string n; 4 int k; 5 6 bool f[15][15];//表示数字之间是否能 阅读全文
posted @ 2019-11-03 13:37 ajthreac 阅读(241) 评论(1) 推荐(0) 编辑