随笔分类 - 洛谷
摘要:链接:P2024 建三个并查集空间太大了,应该写加权并查集 这道题的关系是个环,转过来转过去的。我们的权值就定义成这个点与父节点的关系(0=同类,1=吃 2=被吃) 这样做,我们就要在find时如果搞路径压缩,就要麻烦一点,因为我们要把他与父节点的关系更新成与 祖先节点的关系。 非常易证得,关系就是
阅读全文
摘要:链接:P3902 这道题就是最长上升子序列的模板题,因为我们修改的时候可没说不能改成小数(暴力) 最长上升子序列有很多求法,这道题dp是不行的,TLE。 就要用nlogn的二分算法 这个算法是这样的,建立一个数组了,low,其中low[i]表示长度为i的上升子序列的结尾最小值 来考虑维护它,如果一个
阅读全文
摘要:链接:P1209 这道题是一道贪心+排序的题目 从样例就可以知道,牛棚的输入并不一定有序,我们要先排序 然后考虑贪心,假如有无限多的木板,我们只要在每个牛棚前放一块就可以了。 这样就可以让总长度最小。 但是木板有限,而且如上放的木板都是不能省略的,但是我们可以把两块木板拼起来! 这样就可以减少木板总
阅读全文
摘要:链接:P1910 一看题目,这是道二维背包 然而暴力出奇迹啊 我就写了个dfs 然后TLE,吸了氧也TlE, 怎么办呢,剪枝!!1 思路:搜索,(我写的奇奇怪怪,题解都是搜索请不请第i个人,我写的是当还剩下 多少能力和钱(雾)) 这种写法实在太奇怪了,以至于还要剪枝,还有一个奇葩边界条件qwq。 就
阅读全文
摘要:链接:P1182 一道一眼就能看出来的二分题,而且深刻让我感受到了什么叫不开long long 一场空 (因为这个卡了我半个小时QWQ) 思路还是两部分,二分部分是模板,没什么好说的。 check部分就是定义一个flag记录上一个段的结尾地址,然后用前缀和计算区间和,如果比mid大, 就更新flag
阅读全文
摘要:链接:P1583 一道非常水,非常恶心的大模拟 快速排序拯救世界的题 看体面,什么w,e,d,c真多,然而事实上,我们只要用一个结构体存下编号和w,然后按照题意 模拟,最后加上e就行了 读懂题面是这道题的最大难点 1 #include<iostream> 2 #include<algorithm>
阅读全文
摘要:链接:P1433 一道很水的搜索题,唯一的难点就是预处理,不过公式都写出来了也没什么难的 坑点还是有的,比如说有一个(两个点)的坐标都是一堆小数,就会wa掉 再也没什么难的了 #include<iostream> #include<cmath> #include<cstdio> #include<w
阅读全文
摘要:链接:P2813 一道贪心练手题,数据很水,我把边界条件写错了都是90分 思路很简单,读入后sort一边,根据贪心,我们用两个指针,指向开头,然后开始比较。 如果能摧毁,就++,检查下一个。 如果不能,就把攻击力先加到ans里,检查下一个攻击力 这样如果最后没有防御了,我们就只需要把剩下的攻击力加上
阅读全文
摘要:我们的生活充满了未知与玄学 链接:P5367 康拓展开在此题就是求一个全排列的排名。 我觉得它适合用来优化内存,这样存全排列虽然还要展开,但是内存小啊。 康拓展开的原理 首先,我们要求出阶乘,不然会TLE, 然后根据公式计算就可以了。 ‘但是我们怎么知道对于每一个数,他是当前没有用过的数的排名呢?
阅读全文
摘要:链接:P1816 st表的一道模板题 链接:P1816 st表的一道模板题而已 你都可以用P3865稍微一改水过去 就是这么简单 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 using namespace std; 5 in
阅读全文
摘要:链接:P3865 st表是一个用来解决RMQ问题的表 st表是一个二维数组,表示的是i~i+2^j-1范围的最值 (这东西和区间DP好像) 初始化: 因为2^0=1; 所以说st[i][0]存的就是i~i范围的最值(就是他自己) for(int i=1;i<=n;++i){ cin>>st[i][0
阅读全文
摘要:这是一道搜索水题 (都橙题了能不水吗) 链接:P1913 这道题只要搜索就行了。 边界条件?不用考虑的。 因为这是字符串,我们在搜索时要考虑风向(字母) 然而在边界上是个空字符,也不用搜。 至于vis,如果你是倒着搜索的,就是从无风点开始,也不用考虑(因为风向) 1 #include <iostre
阅读全文
摘要:链接:P4939 这道题肯定是数据结构题。 看一下题面,我们可以建立一个树状数组,维护的是每一天的咕咕咕数量,这样,操作0就变成了 区间加1,而操作0,就是单点查询。 好像比较熟悉欸 就是树状数组模板二 1 #include<iostream> 2 #include<cstdio> 3 using
阅读全文
摘要:链接:P1894 我觉得这道题如果去掉题面,就是一道蓝题了。 这道题还是裸的二分图匹配,用匈牙利算法就可以AC掉。 什么是匈牙利算法?匈牙利 代码几乎差不多,也不需要优化,读入比模板题还复杂点,(他们应该换一下颜色) 1 #include<iostream> 2 #include<cstring>
阅读全文
摘要:链接:P5017 看见了动态规划不会怎么办? 搜索,剪枝,记忆化! (cz就是巨啊) 记忆化搜索,搜索第i个人上车后的下一班车的出发时间 数组的二维是第i个人的等待时间。 Orzcz 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring
阅读全文
摘要:链接:P1330 一道超级大坑题。 一开始我以为是再一个无图染色,结果竟然有一对不相通的子图。 而且还有单独一个点。 这样就麻烦了 一个图染色,要求相邻的点颜色不相通,如果存在,那么把每个点的颜色颠倒也可以。 再这个图里我们就要这个做,运用bfs染色。 然而坑点就在于我们可以颠倒每一个子图的颜色,所
阅读全文
摘要:链接:P5018 这道题可以写暴力 暴力搜索,首先统计下每一个点的下属节点数,用来统计答案。 然后直接对称搜索就行 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 5 using namespace std; 6 int
阅读全文
摘要:链接:P3386 这道题要用到一个名为匈牙利算法的东西 匈牙利算法就是对于每一个点,(例如A)我们先从开始找一个点(例如B),如果他们相连,并且没有被拜访过(一个点一次只能被拜访一次),就让他们配对。然而,如果B已经和C配对了,就把C赶走,看看能不能找到一个D和C配对,如果有,就让C和D配对。让A和
阅读全文
摘要:链接:P2661 这道题有加权并查集的影子 思路还是好想的,根据特性,可以得到如果得到了一条从A到B的边后形成了环,则一定有他们的公共祖先是b。这样就明白了,然后把这个环拆成三部分,这一条边以及B到A、A到B(不加上这条边),他们的和就是长度 一定不能把A,B连起来 1 #include<iostr
阅读全文
摘要:链接:P4779 这道题卡了spfa和迪杰斯特拉朴素版 我们要使用优化版才行。 优化版是用了个堆来完成的。我们考虑一下,在初始化距离为无穷大后,对于每一个点,分成两类,一类是已经确定的,一类是没有的。对于已经确定的,我们没必要去扫描他。对于没有确定的,再分为两类,靠着一个已确定点的和没有的,那么对于
阅读全文

浙公网安备 33010602011771号