07 2019 档案
摘要:链接: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和迪杰斯特拉朴素版 我们要使用优化版才行。 优化版是用了个堆来完成的。我们考虑一下,在初始化距离为无穷大后,对于每一个点,分成两类,一类是已经确定的,一类是没有的。对于已经确定的,我们没必要去扫描他。对于没有确定的,再分为两类,靠着一个已确定点的和没有的,那么对于
阅读全文
摘要:这是道坑比数论题。 它是如此的坑以至于我没法写上过程 (太长了) 过程:大佬 代码: 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 long long x,y; 5 long long a,b; 6 void exg
阅读全文
摘要:链接:P3383 这道题考的是一个线性筛,主要有两种:埃氏筛和欧拉筛 先说埃氏筛,埃氏筛很简单。只要检查每一个数。如果他是没有被标记,就证明他是一个质数。这样我们就需要把他的每一个数标记为合数,然后重复 极为简单 1 #include<bits/stdc++.h> 2 using namespace
阅读全文
摘要:链接:P1195 这道题第一眼肯定能想到最小生成树,不过最小生成树最后就成了一个连通块。 哎,最后?我们想一下卡鲁斯卡尔算法,是一次加上一条边,而且这边的两端不再一个联通块中。 也就是说,我们的每一次操作,就相当于消除了一个连通块。 这样,我们在最后留下k个联通块不就可以了? 1 #include<
阅读全文
摘要:链接:P3379 【模板】最近公共祖先(LCA) 这道题我们要用到一种很神奇的东西,倍增。 首先,我们考虑一下最简单的做法,记录深度。然后先让询问的x,y中深度大的点往上爬,直到两个点深度一样结束。 然后两个点同时开始爬,当两个点相等时,就一定是公共祖先了 但是一个一个爬太慢了,怎么办呢? 我们就会
阅读全文
摘要:题目链接:P1119 简化题意: 这是一道floyed的题。但是有所不同的是,这道题里的点是有时间限制的。 所以说我们在做floyed的时候,我们不能直接枚举所有中转点,而是按照时间来进行。 以及,有可能出现询问的时候两个点没有修好,我们还要判断这个。 而且在这道题里,询问的t是不下降的,这样我们就
阅读全文
摘要:链接:P5057 [CQOI2006]简单题 其实这道题是树状数组的模板题 看一下题意,如果用树状数组,我们很容易想到差分数组。但是一般的差分数组是不行的 因为只有零和一,所以对于每一次操作,实就是让它在0和1中循环。而且,很容易得到,对于一个点进行了奇数次操作,他就会被改变,而偶数次操作就不变,知
阅读全文
摘要:If we define , do you know what function means? Actually, calculates the total number of enclosed areas produced by each digit in . The following tabl
阅读全文
摘要:01背包,是一个非常基础的东西 在此列出三种基本操作 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int f[10000][10000]; 5 int v[100000]; 6 int t[100000]; 7 i
阅读全文
摘要:链接:P4141 消失之物 这道题确实很坑,在上课的时候,我们老师讲了一个分治的做法。 然而分治实在太玄学了。但是老师的课件上面还写了“有一种更简单的操作,但是没有拓展性。” 这种做法是什么呢? 非常简单,比如说我们要求出在没有i物品时的x的方案,我们只要先跑一边背包得到在所有物品都有的情况下的方案
阅读全文
摘要:链接:P3368 【模板】树状数组 2 看一下模板一?请点击 好,这道题让我们实现区间修改和单点查询。但是根据:1中我们可以发现,树状数组的操作只有修改单点和区间求和,那该怎么实现? 我们不可能强行加上这些功能,就需要进行改造。最简单的方法就是改变数组。 有一个数组,我们只要改变其中两个点,就可以实
阅读全文
摘要:链接:P3374 【模板】树状数组 1 树状数组是个很有用的数据结构,当然,有许多时候我们也可以用线段树代替他。 不过线段树比树状数组难得多,所以应该是用树状数组代替线段树才对。 比如说看看这个:[洛谷日报第22期]可以代替线段树的树状数组? 树状数组是一种基于二进制思想实现的数据结构,要用于查询任
阅读全文
摘要:链接:P1631 在做这道题前,我们来考虑这样的一个问题 已知一个n*n的数表,保证在每一行上,有a[i][j]<a[i][j+1],我们怎样求出它的第k小的值? 对于这个问题,我们 在做这道题前,我们来考虑这样的一个问题 已知一个n*n的数表,保证在每一行上,有a[i][j]<a[i][j+1],
阅读全文
摘要:这道题还是很有趣的 大佬们都用了搜索,DP等做法,而本蒟蒻刚刚学了二维前缀和,所以就用了二维前缀和来做这道题 什么是二维前缀和? (你一定知道什么是一维前缀和) 二维前缀和就是一维前缀和多了一维,它的计算公式是 s[i][j]=s[i-1][j]+v[i][j]+s[i][j-1]-s[i-1][j
阅读全文
摘要:这可真是星球大战 链接: P1197 看一下这道题,如果我们正着做,每摧毁一个后就重新建图,判连通。这样肯定工程浩大且超时,我们就要换个方法了。 为什么不倒着做呢?我们先求出来最后剩下的数量,然后倒着恢复一个又一个的星球,并且重新判断这个星球的连通状况。 欸,这样好像简单了许多 代码: 1 #inc
阅读全文
摘要:题目链接:Miku 这道题看第一眼可能想到暴搜,从每个点开始向右找到第一个大于它的点并且计算距离 然而绝对会TLE 这时候我们就要找到一个数据结构了——单调栈。 单调栈,顾名思义,就是和单调队列一样的东西。只不过一个是栈,一个 是队列 (不知道单调队列是什么:这) 所谓单调,就是里面的元素都是按照某
阅读全文
摘要:加权并查集是些什么东西啊 P1196 这道题分为两部分考虑,首先考虑两个点是否在一个队列上,这个简单,用并查集就可以了,然而,我们还要考虑的一点是计算两个点的距离,这就怎么处理呢。 嗯,很容易(不)决定用前缀和,我们就会定义一个数组front,其中front[i]表示以i结尾前面的飞船数。这样我们就
阅读全文
摘要:我就是想学个单调栈然后全网都是个蓝题 连接: POJ 洛谷 (字都在注释上) 1 #include<iostream> 2 #include<stack> 3 #include<cstdio> 4 #include<cstring> 5 using namespace std; 6 struct s
阅读全文
摘要:堆的水题 MIku 这道题第一眼应该会很,懵逼,啥?搜索?贪心? 然后你仔细看看题目 “将长度为21的木板,第一次切割为长度为8和长度为13的,消耗21个单位的能量,第二次将长度为13的木板切割为长度为5和8的,消耗13个单位的能量,共消耗34个单位的能量,是消耗能量最小的方案。” 有没有发现什么?
阅读全文
摘要:漫长的一天,早晨8点在syzx集合,但我在7:30就来了。来了之后我就和tgq坐在一起,等待大佬的到来。 出发了,在车上自然是手机的天下,即使sbl不让说话也阻止不了我们。等到快到日照的时候,sbl说是要建一个群。 一石激起千层浪。此话一出,立马引起了动荡。lpy,yyq在进群之后立马开始了斗图,各
阅读全文
摘要:二分答案的典型题 注意一下check和输出就行 不知道为啥输出还要再检查一遍 连接:Miku 以下为算法部分 二分 二分部分好说,上我们的二分模板就行了,然后检查一下mid值,如果合法,我们就看一下有没有更小的值 如果不合法,我们就检查更大值 check 这部分就是从第一个坐标开始,往后不断检查两点
阅读全文