08 2018 档案

摘要:"题目链接" Solution 1. 非正解 似乎比较蛇啊,先个一个部分分做法,最短路+$DP$. 在求最短路的堆或者队列中存储元素 $dis_{i,j}$ 代表 $i$ 这个节点,走了 $j$ 条边的距离. 然后跑堆优化 $Dijkstra$ 或者 SPFA 即可. 复杂度 $O(N nlog(n 阅读全文
posted @ 2018-08-28 18:18 Kevin_naticl 阅读(264) 评论(0) 推荐(0)
摘要:"题目链接" Solution 在最短路转移的时候在队列或者堆中记录状态为 $f[u][v]$ 代表上一个节点为 $u$ ,速度为 $v$ . 然后按部就班转移即可... Code cpp include define ff double using namespace std; struct sj 阅读全文
posted @ 2018-08-27 20:01 Kevin_naticl 阅读(261) 评论(0) 推荐(0)
摘要:"题目链接" Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 $4$ 个变量: 1. $amx$ 代表当前节点的最大值. 2. $lmx$ 代表当前节点以左端点为起点的区间最大值. 3. $rmx$ 代表当前节点以右端点为结尾的区间最大值. 4. $sum$ 代表整段的和. 然 阅读全文
posted @ 2018-08-25 19:34 Kevin_naticl 阅读(208) 评论(0) 推荐(0)
摘要:"题目链接" Solution 此题,用到的结论都是比较浅显的,但是,我竟然没想到反过来枚举... 只有50分... 被自己蠢哭... 结论比较浅显: 1.对于两个正整数$a$,$b$,设 $gcd(a,b)=k$,则存在$gcd(a/k,b/k)=1$. 也就是说 $x=k_1 a_1$,$a_0 阅读全文
posted @ 2018-08-23 21:21 Kevin_naticl 阅读(188) 评论(0) 推荐(0)
摘要:"题目链接" Solution 分层图+$SPFA$。 建立3层图,其中每一层之中的边权赋为0. 对于任意一条边 $t$ ,其起点 $x$ 和终点 $y$. 我们将 $x$ 在第一层的节点连向 $y$ 的第二层节点,边权为 $w[x]$. 代表在 $x$ 买了这个东西. 然后将 $x$ 在第二层的节 阅读全文
posted @ 2018-08-23 19:59 Kevin_naticl 阅读(232) 评论(0) 推荐(0)
摘要:"题目链接" Solution 这道题,调了我一晚上... 一直80分 _ 所以我们先枚举断开直径上的边,然后分别找到断开后两棵子树的直径. 接着我们讨论 $dis_1,dis_2$ 最优情况. 1. 其 $dis$ 为其到子树直径较远的一端. 2. 如果 $x_1,x_2$ 在子树的直径上,那么显 阅读全文
posted @ 2018-08-22 12:05 Kevin_naticl 阅读(255) 评论(0) 推荐(1)
摘要:"题目链接" Solution 我们直接找到一条直径 $s$,起点为 $begin$,终点为 $end$. 从前往后遍历点 $u$ ,若子树中最大的距离与 $dis(u,begin)$ 相等. 很显然这个点不在公共线段上,很显然可以用子树的中的一段接上,形成一条新的直径. 然后从后往前遍历,同样的道 阅读全文
posted @ 2018-08-20 21:30 Kevin_naticl 阅读(185) 评论(0) 推荐(0)
摘要:"题目链接" Solution 同 $NOIP2007$ 树网的核 . 令 $dist_u$ 为以 $u$ 为根节点的子树中与 $u$ 的最大距离. $~~~~dis_u$ 为 $u$ 到直径中没有包括区间的一端的距离. $~~~~s$ 为直径. 题意很明确,要求直径上的一段区间使得 $Max(di 阅读全文
posted @ 2018-08-20 16:57 Kevin_naticl 阅读(242) 评论(0) 推荐(0)
摘要:"题目链接" Solution 二分答案+并查集. 由于考虑到是要求花费的最小值,直接考虑到二分. 然后对于每一个二分出来的答案,模拟 $Kruskal$ 的过程再做一遍连边. 同时用并查集维护联通块信息. 最后看连的边数以及$1$边是否满足要求即可. Code cpp include using 阅读全文
posted @ 2018-08-18 18:06 Kevin_naticl 阅读(208) 评论(0) 推荐(0)
摘要:"题目链接" Solution 好题. 一开始一直在想怎么蛇皮建图,但是发现一直蛇不出来... 正解是用类似于 dijkstra 的算法对所有点进行松弛. 对于每个元素记录两个值: $cost$ 代表它的最小花费. $ans$ 代表它的方案数. 同时用一个$f_{i,j}$记录第$i$种和第$j$种 阅读全文
posted @ 2018-08-17 15:26 Kevin_naticl 阅读(282) 评论(0) 推荐(0)
摘要:"题目链接" 大致题意 给你 $n$ 个字符串, 要求你给出最小的代价. 对于每个字符串: 1.如果它的后缀在它之后,那么代价为 $n^2$. 2.如果一个字符串没有后缀,那么代价为 $x$, $x$是它所处的位置. 3.如果字符串前面有它的后缀且位置为 $y$,那么代价为 $x y$. Solut 阅读全文
posted @ 2018-08-15 21:58 Kevin_naticl 阅读(238) 评论(0) 推荐(1)
摘要:"题目链接" Solution Trie 树水题。 直接将前面所有字符串压入Trie 中. 在查询统计路上所有 有单词的地方 和最后一个地方以下的 单词数 即可. Code cpp include using namespace std; const int maxn=500005; int ch[ 阅读全文
posted @ 2018-08-13 20:54 Kevin_naticl 阅读(246) 评论(0) 推荐(0)
摘要:"题目链接" Solution 区间DP。 显然是统计最长的回文序列. 状态定义: 令 $f[i][j]$ 表示 $i$ 到 $j$ 的最长回文序列长度. 状态转移: 1. $s[i]\neq s[j]$ 那么此时 $f[i][j]$ 即为$f[i][j 1]$,$f[i+1][j]$种较大的那个. 阅读全文
posted @ 2018-08-12 21:11 Kevin_naticl 阅读(159) 评论(0) 推荐(0)
摘要:"题目链接" 题目大意 给你几个字符串 (1 Solution 区间DP。 比较典型的例题。 状态定义: 令 $f[i][j]$ 表示 $i$ 到 $j$ 的回文序列个数,$s$ 为给出的字符串. 状态转移: 1. $s[i]\neq s[j]$ 那么此时 $f[i][j]$ 即为$f[i][j 1 阅读全文
posted @ 2018-08-12 19:58 Kevin_naticl 阅读(154) 评论(0) 推荐(0)
摘要:"题目链接" Solution 感觉比较巧的题啊... 考虑几点: 可以交换无数次字母表,即字母表可以为任意形态. 对于以其他字符串为前缀的字符串,我们可以直接舍去. 因为此时它所包含的前缀的字典序绝对比它本身小. 需要使得某个字符串 $S$ 字典序最小 ,需要讨论两种情况: $1.$ 与它 没有公 阅读全文
posted @ 2018-08-10 21:17 Kevin_naticl 阅读(324) 评论(0) 推荐(0)
摘要:AC自动机笔记 0.0 前言 哇,好久之前就看了 KMP 和 Trie 树,但是似乎一直没看懂 AC自动机?? 今天灵光一闪,加上之前看到一些博客和视频,瞬间秒懂啊... 其实这个玩意还是蛮好理解的... 在这里先给一个样例,之后也都好举例子. 模式串: 5 FG HE HERS HIS SHE 匹 阅读全文
posted @ 2018-08-08 16:23 Kevin_naticl 阅读(1413) 评论(2) 推荐(3)
摘要:"题目链接" Solution 这道题,我是用 $map$ 做的. 具体实现,我们用一个 $string$ 类型表示任意一种情况. 可以知道,排列最多只有 $8!$ 个. 然后就是直接的广搜了.直接用初始串去操作即可. 关于字典序,我们直接按 $ABC$ 启用操作即可. Code 阅读全文
posted @ 2018-08-07 14:45 Kevin_naticl 阅读(232) 评论(0) 推荐(0)
摘要:"题目链接" Solution 这道题算是很经典的状压问题了,好题. 考虑到 $n$ 的范围仅为 $10$ , 那么也就是说所有状态压起来也只有 $1024$ 种情况. 然后我们发现 $m$ 居然小于 $100$ . 于是可以 $O(nm)$ 处理出每一种情况可以到达的结果. 然后形成一个有向图,然 阅读全文
posted @ 2018-08-06 20:59 Kevin_naticl 阅读(377) 评论(0) 推荐(0)
摘要:题目描述 给出一张地图,这张地图被分为n×m(n,m Solution 这个题想了我一会啊... 所以来记录一下. 想法: 直接从起点开始跑广搜. 但是与传统广搜不同的是,一跑就把那一整行都跑掉,然后全部压入队列中. 然后同时将这一行都打上标记.也就是说这个时候我们的方向是固定的. 具体感受一下代码 阅读全文
posted @ 2018-08-06 11:22 Kevin_naticl 阅读(1888) 评论(0) 推荐(0)
摘要:"题目链接" Solution 比较恶心的模拟题(主要是难看懂题意其实) "题意戳这里" 然后根据一些简单的数学常识,可以知道这是一个二次函数. 所以我们每次枚举一个值, 然后判定政府给出的价格是否是顶点即可. 与其少一块钱和多一块钱比较即可. Code cpp include using name 阅读全文
posted @ 2018-08-02 15:47 Kevin_naticl 阅读(378) 评论(0) 推荐(0)