摘要:
题意:给定一张无向图,图中每条边均为白色或黑色,求有K个白色节点的边权和最小的生成树,数据保证有解 题解: 比较直观的想法是跑一个最小生成树,然后不断换边使得白边的数量等于K 然而我们可以给所有白边加上一个值,使其被选的几率增大或减小,而赋的值可以通过二分来找到。 #include <cstdio> 阅读全文
摘要:
题意:给定一张无向图,图中每个边都有a,b两种边权,求一条从S到T的路径,使得路径中(a的最大值+b的最大值)最小 法一:我们先将边按a排序,每次加入一条边,然后将加入的边的两端入队,跑一边SPFA求从1到达每个节点路径上的最长的一条边的长度。这样需要跑M边SPFA,然而有一个优化——我们可以直接将 阅读全文
摘要:
题意:求一个无向图的最小生成树与次小生成树的边权和是否相等 题解: 首先有一个性质,就是最小生成树上的任意两点的距离就是其在原图中的最短路,严格的证明我不会- -,但是由于Prim Dijkstra算法的过程完全相同,所以这个性质比较显然(不会证就不会证呗为何还要找理由QAQ) 还要一条性质就是无向 阅读全文
摘要:
题意:求恰好经过K条边的最短路 题解:根据Floyd的性质,如果我拿一开始给出的两个边权矩阵(只经过一条边的最短路的邻接矩阵)跑Floyd,得到的一定是只经过两条边的最短路的邻接矩阵(普通的Floyd是用求出的最短路来更新最短路而非用初始矩阵),同理用两条边的邻接矩阵一定能得到四条边的,因此N条边的 阅读全文
摘要:
题意:给订一张无向图,求一条S到T的路径,使得路径上的最大边权与最小边权的比值最小 题解:将边由小到大排序,暴力枚举最小边,然后借鉴Kruskal的思想,由小到大加入每一条大于初始边的边,检验S与T是否连通,若连通则更新答案,枚举下一条边。 #include <cstdio> #include <c 阅读全文
摘要:
题意:给定N个变量和K个约束条件,形如x1==x2,x1-x2≥a……,求$\sum\limits_{i = 1}^N {{x_i}}$的最小值 题解: 首先差分约束系统是指形如:x[i]-x[j]<d[k]的形式的几个方程联立得到的方程组,其中d均为已知量,x均为未知量。(至于等于好嘛……d--不 阅读全文
摘要:
题意:求每个节点v的$\sum\limits_{s \ne v,t \ne v} {\frac{{{C_{s,t}}(v)}}{{{C_{s,t}}}}}$,其中${C_{s,t}}(v)$为从s到t经过v的最短路的数量,${C_{s,t}}$为s到t的最短路的总数 题解:跑一边Floyd然后枚举判 阅读全文
摘要:
题意:给定一张图,有可以将K条路径的花费变为0,求从1到N的最短路 题解: 分层图+最短路水过。 我们把原图复制K份,平行的放在一起(就像饼干一样一层层的),然后给每个图编号1 2 3……K,然后对于原图中每一条边(x,y),在i的x和i+1的y之间连一条边权为0的边,然后在这K个图上做最短路即可。 阅读全文
摘要:
题意:给定一个图,图中有保护关系(u,v)表示到v之前必须先到一次u,求从1到N的最短路 题解: 定义d1[i]为直接到达i的最短距离,这个的更新和普通的Dijkstra一样 定义d2[i]为解除i的所有保护的最短距离(不一定要在i结束),这个更新起来很简单,每经过一个节点就将其所控制的城市的发生器 阅读全文
摘要:
题意:给定N个正整数ai,求[L,R]中能凑出多少个数 题解: 首先取最小的ai,如果k*ai+x合法,则(k+n)ai+x均合法(其中L<=(k+n)ai+x<=R) 因此对于每一个x,我们只需要求出最小的k,然后就能算出所有的合法解的数量。 至于算k,用最短路就好 #include<map> # 阅读全文
摘要:
题意:(这题没图不好说……大家还是自己去看吧) 题解: 首先有一点需要注意,就是题面中a和b数组搞混了…… 像势能分析那样,我们每花费一定金额b[i][j]就相当于得到了a[i][j]的势能,这样我们建图,图中每一个点均由花费(边权)、横纵坐标、势能四个量决定,显然转移的时候有: 势能==0:向下一 阅读全文
摘要:
题意:给定限制条件(a,b)表示a必须在b之前,求所有合法序列中,小的数尽量在前面的方案 题解:首先我们根据限制条件建反向图,然后在反向图上求字典序最小的拓扑序(队列改为堆),逆序输出即可。 #include <queue> #include <functional> #include <cstdi 阅读全文
摘要:
题意:给定两种限制:1、编号为i的航班必须在ki+1之前起飞 2、(a,b)表示a必须在b之前起飞。求:1、一个合法起飞序列 2、每个航班在所有合法起飞顺序中,最早的起飞时间。问题保证有解 题解:首先按照第二个限制条件建图,那么第一问随便跑一个拓扑序就好,关键在第二问,我们枚举每一个飞机,假定该飞机 阅读全文
摘要:
题意:给定N个有A C G T组成的字符串,求长度为L的仅由A C G T组成的字符串中有多少个是不含给定的N个字符串的题解: 首先我们把所有的模式串(给定的DNA序列)建Trie,假定我们有一个匹配串,并且在匹配过程到S[i]这个字符时匹配到了Trie上的某个节点t,那么有两种可能: 匹配失败:t 阅读全文
摘要:
题意:给定三个操作:1、在当前字符串的末尾添加一个字符c 2、在当前字符串的末尾删除一个字符 3、记录当前字符串并对其标号。再给出N组询问,每组询问需回答第x个字符串在第y个字符串中出现的次数 题解: 首先按照如下规则建Trie,设当前节点为t,第i个字符串的结尾在Trie中的位置为mark[i]: 阅读全文
摘要:
题意:给定N个字符串,设S为N个字符串首尾相连组成的字符串,查询每个字符串在S中出现的次数。 题解: 首先我们在构造Trie的时候,将构造过程中经过的节点的cnt全部++,此时cnt中记录该模式串被多少个模式串包含。 如果A为B的子串,B为C的子串,显然A也是C的子串,因此我们从下往上回溯,每回溯到 阅读全文
摘要:
题意:给定一个字符串,维护:1、修改某个位置的字符 2、查询从p、q位置开始相同字串的长度 3、在某个位置后面插入一个字符 题解:因为需要支持修改所以很容易想到用平衡树,每个节点维护该节点子树所构成的字串的Hash值,修改和插入不用多说,查询我们二分答案,然后在Splay上查询即可。 #includ 阅读全文
摘要:
题意:给定N个字符串,求这N个字符串中有几对字符串有且仅有一位不同 题解:首先双哈希存下来,枚举删除哪一位,枚举每一个字符串删除后的哈希值,对哈希值排序之后看有多少个相同的,每组大小为n的相同字符串集对答案的贡献为$C_n^2$ #include <cstdio> #include <cstring 阅读全文
摘要:
请不要吐槽为什么这么快刷了这么多题……我最近只是在复习以前做过的题,所以把以前的解题报告转移过来QAQ,所以有些图片会有CSDN的水印,毕竟我快要懒死了 这个blog应该长期使用了,欢迎各位神犇莅临指点本蒟蒻。原博客 阅读全文
摘要:
题意:给定一个字符串,求最短的循环节使之循环后能构成这个字符串 题解: 根据next的性质,如果长度为L的字符串next[L]=i,则S[i+k-1]==S[i-(L-i+1)+k-1],同时我们不断的拆分下去,直到最小的一部分,这最小的一部分一定是和L-i+1到L相同的,也就是说如果最小的那一部分 阅读全文