06 2019 档案
摘要:洛谷上的翻译是真的哲学♂♂♂ 非常van的题目传送门♂♂♂ 个人认为这题充其量也就是个蓝(nan)题,首先处理-1的情况,-1的情况是不等式组无解,按照差分约束的规则,无解说明出现了负环,先跑一遍以0为源点的SPFA判断有无负环即可。再来处理-2的情况,结果为-2就说明1号和n号节点不存在直接的或间
阅读全文
摘要:题目传送门 差分约束系统很棒的应用,首先运用前缀和的思想,令s[k]为0~k中被选出来数的个数,则s[b[i]]>=s[a[i]-1]+c,这样会有一个问题,那就是下标可能会出现负数,因此我们可以改变前缀和表示的方法,设s[k]为0~k-1中被选出来的数,则约束条件可以转化为:s[b[i]+1]-s
阅读全文
摘要:题目传送门 对于一个刚接触差分约束系统的OIer来说,这算是一道细节比较多,也比较难的题。首先就是这道题有5种不同的约束条件,对于条件1,3,5直接按照差分条件建边即可,条件2,4要先移项,再建边。之后再求单源最长路,好不容易做出来后你就会发现数据卡SPFA!!!!这里可以加两个小小的优化:1)当a
阅读全文
摘要:题目传送门 这道题需要解决的是区间求值和单点修改,可以用线段树求解,首先构造一颗[1,m]的“空树”(序列至多有m个数),即每个节点维护的信息均为0,新建一个变量sum表示序列中实际数的个数,每次修改第sum个节点,最后n个数就是[sum-n+1,sum],简单维护即可。 下面给出参考代码: 1 #
阅读全文
摘要:差分约束系统解决的是一个N元1次不等式求解的问题,其中每一个不等式都形如Xi-Xj<=Ck,其中Ck为常数。差分约束系统与最短路关系甚密,可以用最短路算法求解,即先对不等式进行移项操作,将不等式转化为Xi<=Xj+Ck,这正是求完单源最短路后应该满足的条件(在没有负环的情况下)。其中每一个变量可以看
阅读全文
摘要:题目传送门 评分:省选/NOI-,难度:普及+/提高 这题真的和RMQ没有半点关系,只需要一个裸的线段树,连pushdown都不需要,只需要两种操作:区间修改和区间求最小值,在回溯时加上标记即可,唯一有点思维含量的是对环的处理,如果左端点大于了右端点,就维护(l,n)(1,r),否则正常维护即可,不
阅读全文
摘要:题目传送门 解析:这道题本质上是求两点之间经过n条边的最短路,是一道快速幂的应用,只需把快速幂自乘的操作改成最短路边数*2,把快速幂乘答案的操作改成维护答案即可。 1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 #include<c
阅读全文
摘要:题目传送门 这道题很好地利用了Floyd的思想,我们要明白Floyd中dist[i][j]的含义:在外层循环变量为k时,dist[i][j]表示只经过编号不大于k号的节点,i->j的最短路,根据这个性质,我们不难想到在以k为中转点松弛之前,先以k为中转点看最小环(因为还没经过k号节点,从而保证了正确
阅读全文
摘要:一、基于各种数据结构的SPFA 以下各个数据均为不卡SPFA的最短路模板:P3371 【模板】单源最短路径(弱化版)的测试时间 1、STL队列:用时: 1106ms / 内存: 8496KB 1 #include<iostream> 2 #include<cstdio> 3 #include<cst
阅读全文
摘要:一、前言 对于维护区间连续和问题,我们已经学了很多种算法和数据结构,在规定n<=100000,m(操作数)<=200000,内,暴力算法可以解决单点修改,单点求值。前缀和算法可以解决区间求和问题,而最近学的树状数组可以解决单点修改,区间求和的问题。而当我们需要区间修改时,上边的三种算法都将失效,我们
阅读全文
摘要:题目传送门(Vjudge) 这道题本质上是Floyd求传递闭包,所谓传递闭包,就是这个样子,非常的简单,即在一个传递闭包中元素之间都有某种关系。 这道题数据范围很小,因此我们可以开一个邻接矩阵,floyd[i][j]就表示i>j。当我们判断的时候很简单,当floyd[i][j]==floyd[j][
阅读全文
摘要:题目传送门 这题和01背包最大的区别在于它没有价值,所以我们可以人工给它赋一个价值,由于要求体积最大,把价值赋成体积即可。顺带一提,这题数据范围很大,二维会MLE,要压缩成一维才可以AC 下面给出参考程序: 1 #include<iostream> 2 using namespace std; 3
阅读全文
摘要:题目传送门 这是一道次短路的板子题,和“路障”那一题不同的是,这个题的次短路不是严格大于最短路,所以连分类讨论都不用了,直接记录路径后删边求最短路即可。 下面给出参考程序: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #
阅读全文
摘要:题目传送门 热烈庆祝SZM黄题破80,绿题破30,蓝题破20!!!(紫题还是2,,,,orz%%%) 非常水的一道最短路,小于等于100果断Floyd,要好好读题,别忘记特判,8分钟基本就能做出来啦~~~ 参考程序如下: 1 #include<iostream> 2 #include<cstring
阅读全文
摘要:题目传送门 今晚闲游洛谷,在图论中发现了这独树一帜的记忆化搜索。看到这道题,第一感受就是DFS,每一个点DFS一遍,如果能更新就更新,但是这样的时间复杂度是O(nm),对于1≤N,M≤105的数据显然是承受不住的,会T飞掉~ 究其原因,是因为不断地更新,浪费了大量的时间。有没有改进的方法???答案是
阅读全文
摘要:题目传送门 这题题意很明确,就是求图的次短路,我用了一个非常奇葩的方法:伟大的分类讨论; 注意,以下说明均针对无向图 首先,图的次短路只有2种情况: 1)1次最短路+乱转(源点->最短路上离其他点最近的点->离它最近的点->返回这个点->终点) 2)直接次短路(依次屏蔽每一条边) 可以证明,无向图的
阅读全文
摘要:题目传送门 黄色的MST板子,真香~~~直接累加所有边权之后跑一边Kruskal,减掉MST重量即可 参考代码如下: 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node 5 { 6 int u
阅读全文
摘要:题目传送门 十分值得一做的最短路,题目意思十分明确,一条边权值加倍后最多比加倍前的最短路花费多多少。首先看到m<=5000,第一念头就是跑m遍最短路,但是会严重超时,实际上是由于有些边的权值改变,对最短路没有造成任何影响,才导致了我们程序的严重超时,所以我们采取第一次跑最短路记路径的方法。开三个辅助
阅读全文
摘要:题目传送门 晚上闲游洛谷,偶然发现这道绿色的MST板子 首先,毫无疑问,这是一道MST的题,而重点在与这句话:“请求出农民John 需要为使所有农场都与有水的农场相连或拥有水井所需要的钱数。” 需要让所有地方都有水,但是这些农场最开始是没水的,我们需要加入一个“水源”节点,而0号节点一般在MST板子
阅读全文
摘要:题目传送门 解析: 题目释义:一张图有c个节点,每个节点有一个相等的权值d,有p条无需花费的路径和f条需要花费的路径,求图中最长路。 算法设计: 由于可能出现正环,所以需要SPFA算法,在加边的时候把p条无需花费的路径边权设为d,而f条需要花费的路径设为d-z(其中z是这条路需要的花费)。由于终点不
阅读全文
摘要:题面传送门 解析: 本题十分简单,我认为不应该是一道绿题,只需要建一个完全图,然后在建边之前判断是否大于c即可。然后跑一边最小生成树,Kruskal,如果可以的话输出重量,否则输出-1即可。参考程序如下: 1 #include<iostream> 2 #include<algorithm> 3 us
阅读全文
摘要:前言 前几天研究的Bellman_Ford算法虽然可以算负权,可是时间复杂度高达O(NM),即使是采用了队列优化,也有可能被网格图卡回O(NM),所以今天我们就来研究一个新的,更快的,但同时只能在正权图上运行的算法:Dijkstra(朴素Dijkstra算法) Dijkstra基本思想及实现过程 我
阅读全文
摘要:题目描述 国防部计划用无线网络连接若干个边防哨所。2 种不同的通讯技术用来搭建无线网络; 每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。 任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这
阅读全文
摘要:题目描述 Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序。 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1不为空,将S1栈顶元素弹出至输出序列 操作c 如果输入序列不为空,将第一个元素压入栈S2
阅读全文
摘要:题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。 现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道 它到底是哪一种。 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 第一种说法
阅读全文
摘要:Dijkstra在正权图上运行速度很快,但是它不能解决有负权的最短路,如下图: Dijkstra运行的结果是(以1为原点):0 2 12 6 14; 但手算的结果,dist[4]的结果显然是5,为什么会出现这种情况呢?原因很显然,Dijkstra认为,从一个更长的边过来不会比一个更短的边过来更短(读
阅读全文