摘要: "传送门" 分析: 记录最短值和次短值,每次dijkstra更新。 注意: 如果用从que中取出的值更新了最短值,那么就将最短值放入que中。 如果用从que中取出的值更新了次短值,那么就将次短值放入que中。 从que中取出值后,设取出的最短/次短值为dist,那么在后续更新中写成$dis[v] 阅读全文
posted @ 2017-11-10 14:39 CzYoL 阅读(20) 评论(0) 编辑
摘要: 题目大意: 各一个奇环内向森林,求每两个点对间的距离之和。无法到达则距离为 1. 分析: 首先Tarjan找出size大于1的连通分量(环),环中的边的贡献可以单独计算。 然后从入度为0的点向内dfs,直到遇见size大于1的环。记录每个点的to_size(朝向环方向有多少个节点),from_siz阅读全文
posted @ 2017-11-09 08:04 CzYoL 阅读(43) 评论(0) 编辑
摘要: "传送门" 题意: Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路。N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a,b),(c,d)表示,对于任意两个国家x,y,如果a [4, 5](此处就只连单向边示意)阅读全文
posted @ 2017-11-08 21:54 CzYoL 阅读(208) 评论(0) 编辑
摘要: 题意: 一开始有n个非负整数h[i],接下来会进行m次操作,第i次会给出一个数c[i],要求选出c[i]个大于0的数并将它们 1,问最多可以进行多少次? 分析: 首先一个显然的贪心就是每次都将最大的c[i]个数 1,于是就可以用无旋式treap来维护,基本操作中split_k和split_v都使用普阅读全文
posted @ 2017-11-06 17:57 CzYoL 阅读(48) 评论(0) 编辑
摘要: "传送门" 分析: 并查集: 第一步先将所有矛盾从大至小排序,显然先将矛盾值大的分成两部分会更优。 普通的并查集都只能快速合并两个元素至同一集合,却不能将两个元素分至不同集合。 对于将很多数分成两个集合,并给出两数存在的矛盾关系(A和B不能在一集合),普通并查集无法解决。 考虑见每个元素拆成两个点,阅读全文
posted @ 2017-11-05 20:32 CzYoL 阅读(88) 评论(0) 编辑
摘要: "传送门" 题意: 每次合并两份邮件,或者将某一份邮件独立出来,问最后有多少个邮件集合。 分析: 考虑初始化每个节点的祖先为一个虚父节点(i + n),虚父节点指向它自己。这样可以进行正常的合并操作。 而在删除时,将该节点的祖先置为一个更大的数(++anc_cnt),并让该anc_cnt指向它自己,阅读全文
posted @ 2017-11-04 22:12 CzYoL 阅读(47) 评论(0) 编辑
摘要: "传送门" 分析: 单调队列:维护两个递增、递减的队列,每次都加入新元素并更新,如果最大值(递减队首) 最小值(递增队首) k,那么将最左段更新为前面两者中较前的那一个,并弹掉。用deque可以很方便的实现双向的队列。 code阅读全文
posted @ 2017-11-02 21:19 CzYoL 阅读(42) 评论(0) 编辑
摘要: "传送门" 分析: 虽然颜色种类很多,但是所有颜色个数之和n是一定的,这时候就可以使用vector对每个颜色维护一个坐标集合,空间只占n个。 对于查询L,R:直接一行: 对于修改: 1. 两种颜色相同,不管。 2. 两种颜色不同:由于刚开始向每种颜色集合中加入坐标时,坐标是升序加入的,假设交换的是X阅读全文
posted @ 2017-11-02 19:07 CzYoL 阅读(71) 评论(0) 编辑
摘要: 题意: 最近西雅图的高中校园里流行这样一个游戏。 我们有一个骰子,这个骰子有M个面,分别写着1..M,并且是个公平的骰子,换句话说,一次投掷时每个面朝上的概率是相同的。 游戏的组织者使用这个骰子进行N次投掷,并且告诉玩家点数v出现了至少一次。那么玩家需要猜测N次投掷的点数之和。如果猜对了,就赢得了这阅读全文
posted @ 2017-11-02 19:00 CzYoL 阅读(26) 评论(0) 编辑
摘要: 题意: 如果一个字符串等于s和t的长度之和($l \le 50$),并且可以拆成两个字符串子序列,分别与s和t相同,那么它就是s和t的一个并字符串(从字符串中选出若干个可以不连续的字符按照原序列写出来形成的新字符串)。定义趣味串为s和t的并字符串的任意一个回文子串,求所有趣味串的长度最大值。 分析:阅读全文
posted @ 2017-11-02 18:56 CzYoL 阅读(21) 评论(0) 编辑