09 2019 档案
摘要:成绩排序 "成绩排序" 这里需要注意的就是超内存的问题。 解决方法就是通过指针的方式,每次动态开n大小的内存,而不是一开始就分配。 include using namespace std; int n; const int maxn=1e6+6; struct node{ string name;
阅读全文
摘要:压缩编码 "201612 4" 一开始看这题还以为是哈夫曼编码的题目,结果是哈夫曼题目的变形。 哈夫曼编码是每次合并任意两堆石子,而这里的题目是合并相邻的两堆石子,而且这里的合并花费是合并两堆石子加上所有的叶子结点。 参考图解:https://blog.csdn.net/more_ugly_less
阅读全文
摘要:引水入城 "201703 5" 这从题目分析来看很像最大流的问题,只需要增加一个超级源点和一个超级汇点就可以按照题意连边再跑最大流算法。 因为数据量太大了,肯定会超时。但是没有想到可行的解决方法。 include using namespace std; const long long INF=0X
阅读全文
摘要:地铁修建 "201703 4" 这题就是最短路的一种变形,不是求两点之间的最短路,而是求所有路径中的最长边的最小值。 这里还是使用d数组,但是定义不同了,这里的d[i]就是表示从起点到i的路径中最长边中的最小值。 在松弛的时候,注意是d[i] max(d[u],cost),max保证了是所有路径中的
阅读全文
摘要:Jungle Roads "HDOJ 1301" 这是最小生成树的水题,唯一要注意的就是那个n,其实输入只有n 1行。 include include include include include include include using namespace std; const int INF
阅读全文
摘要:Borg Maze "POJ 3026" 一开始看到这题是没有思路的,看了题解才知道和最小生成树有关系。 题目的意思是每次走到一个A或者S就可以分为多个部分继续进行搜索。这里就可以看出是从该点分出去的不同路径。 所以首先需要使用bfs求出每对顶点的最短路来,但是在这个过程中,我出了个bug,导致调试
阅读全文
摘要:Highways "POJ 1751" 注意这里的样例答案也是对的,只是输出顺序改变,但是这也没关系,因为题目加了特殊判断。
阅读全文
摘要:Arctic "POJ 2349" 这题是最小生成树的变形题目。题目的意思是已经有s个卫星频道,这几个卫星频道可以构成一部分的网络,而且不用费用,剩下的需要靠d的卫星接收器。题目要求的就是最小生成树中,最大的边的长度。 题目中的传入kruskal函数里面的sn表示还需要连接的顶点个数,因为剩下的可以
阅读全文
摘要:Tram "POJ 1847" 这里其实没有必要使用SPFA算法,但是为了巩固知识,还是用了。也可以使用dijikstra算法。
阅读全文
摘要:frogger "POJ 2253" 这题的代码特别像prim求解最小生成树的代码,其实两者本来也很像。 这里的d数组不再维护的起点到该点的最短距离了,而是路径中的最长距离。 include include include include include include include using
阅读全文
摘要:昂贵的婚礼 "POJ 1062" 这道题目一开始看的时候难以理解,但是仔细想,还是可以和最短路联系的,我觉得类似于硬币交换等问题。 以下需要注意几个点,第一就是因为题目规定如何和超出了等级限制的人交易,则拒绝交易。也就是说符合交易条件的人一定和第一个人(国王)之间的等级差距小于m。 这里通过枚举等级
阅读全文
摘要:Marriage Match IV "HDOJ 3416" 这题的题意就是要找两点之间最短路的路径个数,而且边不能重复。 最大流和最短路的结合。首先正向和反向建图,再跑两遍dijikstra。到这里就求出来起点到某一点的最短路以及某一点到终点的最短路。 还有一个关键的公式就是如何判断一条边是否在最短
阅读全文
摘要:The Shortest Path in Nya Graph "HDOJ 4725" 这题是关于最短路的问题,但是和常规的最短路有点不同的就是这里多了层次这一结构。 为了解决这一问题可以把每一层抽象或者划分为两个点:入点和出点。 对于每个点,将所在层的入点和该点相连,再将该点和所在层的出点相连,权值
阅读全文
摘要:Extended Traffic "LightOJ 1074" 这题因为涉及到减法和三次方,所以可能会出现负圈。 这里使用的算法叫做SPFA算法,这个可以用来判负圈和求解最短路。Bellman Ford算法和SPFA算法很相似。 这里要注意的是cnt出现次数应该要在哪里加。 include incl
阅读全文
摘要:除法 "201709 5" 这道题有很多种方法来做,最常用的就是线段树和树状数组。 如果使用线段树来做,就会想到区间修改的update函数。但是这里可能会涉及到v是1或者a[j]是0的情况,所以用这种方法会超时,最多50分。 可以修改一下代码,使用点修改来做这道题。在main函数里面增加一个循环,用
阅读全文
摘要:通信网络 "201709 4" 一看到题目分析了题意之后,我就想到用floyd算法来求解每一对顶点的最短路。如果一个点和任意一个点都有最短路(不为INF),那么这就是符合的一个答案。可是因为题目超时,只能拿60分。 另一种解法就是使用dfs把图简单的遍历一遍就可以了。这里要用到两遍dfs反着也要建图
阅读全文
摘要:JSON查询 "201709 3" 纯字符串模拟,考的就是耐心和细心。可惜这两样我都缺。。。 include include include include include include include using namespace std; const int maxn=102; int n,
阅读全文
摘要:公共钥匙盒 "201709 2" 这题的思路一开始不是很清晰,一开始想用贪心去做。但是发现按照题目的思路不对。所以这里采用的是类似于多项式的加减的处理。 include include include include include include include using namespace s
阅读全文
摘要:Tunnel Warfare "HDOJ 1540" 这题关于线段树的操作有一定的难度,需要较好的思维能力。 关于题目的详细解答已经在代码中体现了。
阅读全文
摘要:Can You answer these queries? "HDOJ 4027" 这道题目和前面做的题目略有不同。以前的题目区间更新的时候都是统一更新的,也就是更新相同的值。但是这里不一样,这里更新的每个叶子结点改变不同。 考虑到数字最大也就64位,所以就算加上开根号的操作,也就最多开7次,所以这
阅读全文
摘要:Mayor's posters "POJ 2528" 本题是线段树的区间更新和离散化的结合。 代码中需要注意的就是这里要加入一个去重的操作。而且我这里建树的时候是从1开始的,所以下标的问题要注意。 还有一个需要注意的地方就是根据题目的意思在离散化之后,可能会出现一个问题,就是[1,10],[1, 4
阅读全文
摘要:A Simple Problem With Integers "POJ 3468" 这题是区间更新的模板题,也只是区间更新和区间查询和的简单使用。 代码中需要注意的点我都已经标注出来了,容易搞混的就是update函数里面还需要计算sum数组。因为这里查询的时候是直接用sum查询结点。 //区间更新,
阅读全文
摘要:I Hate It "HDOJ 1754" 1. 这道题是线段树简单的入门题,只是简单考察了线段树的基本使用,建树等操作。 2. 这里需要注意的是输入要不使用scanf要不使用快速输入。 3. 这里的maxs数组需要开大一点,4倍是最稳妥的,一定不会溢出。 4. 区间查询的时候要注意if后不是之间使
阅读全文
摘要:URL映射 "CCF201803 3" include include include include include include include include include using namespace std; const int maxn=101; const int maxm=10
阅读全文
摘要:#管道清洁 ##201812-5 需要清洁的管道下界为1, 不需要清洁的管道下界为0, 可重复经过的管道上界为正无穷, 不可重复经过的管道上界为1。 这属于无源无汇的有容量下界的最小费用可行流。解决的方法就是首先增加一个源点和一个汇点,然后对每一条有下限的弧进行改造,改成容量下限为0,上限为c-b的
阅读全文
摘要:元素选择器 "201809 3" 这里我只考虑了没有后代选择器的情况 include include include include include include using namespace std; string s[101]; int n,m; int main(){ cin n m; g
阅读全文