11 2021 档案

摘要:首先如果不为3的倍数肯定无解 如果为3的倍数 dfs查找每个点作为根的子树和 遇到一个满足和为sum/3的就删去 正确性: 可能会有很多个这样的点,他们之间的切割方式可以排列组合,要不要记录谁先割啥的,dp? 不,因为每个点其实都是一样的,对于两个合法的点之间..它们和为0,这段就没贡献,不影响。 阅读全文
posted @ 2021-11-17 08:04 liyishui 阅读(45) 评论(0) 推荐(0) 编辑
摘要:根据题目特点,b和所有的其他点相连,能先确定b 确定b后再找到第一个不是b的,赋值为a,或者为c,反正都是对称的 赋完值后,对于所有的点,要么和这个点连,要么不联 联的话如果是b就是b,不是b就只能是a 不联的话只能是c 这样一通构造就能得到一个序列,但不一定保证合法 最后再check一下 : #i 阅读全文
posted @ 2021-11-17 08:01 liyishui 阅读(37) 评论(0) 推荐(0) 编辑
摘要:终于我也学到manache了hh,当初一干省选大佬口中的算法,根本碰不到还在调搜索的我 :上板子 诡异的地方在于,最近写的kmp在本地都能过,一交到oj又t,况且不是wa.. -- #include<bits/stdc++.h> using namespace std; int len,maxn=- 阅读全文
posted @ 2021-11-03 15:16 liyishui 阅读(29) 评论(0) 推荐(0) 编辑
摘要:缩点是求联通问题的基本操作qaq 注意特判原来就联通的情况 #include <iostream> #include <math.h> #include <string.h> #include <vector> #include <map> #include <queue> #include <st 阅读全文
posted @ 2021-11-03 14:38 liyishui 阅读(24) 评论(0) 推荐(0) 编辑
摘要:I am coming!KMP! (中二完毕) 1711: 建议数组用pre命名而不是next,next是c++的关键字 问一个串是否在另一个串中出现过,如出现输出最小出现位置,上模板 -- #include <iostream> #include <math.h> #include <string 阅读全文
posted @ 2021-11-02 20:27 liyishui 阅读(301) 评论(0) 推荐(0) 编辑
摘要:很多详细解析也看了,只能说学稍微复杂点的东西需要老老实实yy,急没有鸟用### 代码对应洛谷的板子; -- #include<bits/stdc++.h> using namespace std; char ls[1000009],lt[1000009]; int pre[1000009],ans[ 阅读全文
posted @ 2021-11-02 19:37 liyishui 阅读(30) 评论(0) 推荐(0) 编辑
摘要:关于思路: 在拓扑题集里发现了这只,怎么想怎么奇怪,产生冠军当且仅当整个拓扑序打出来是联通的,并且到尽头不能有两个以上出度为0的点,这咋判断? 根据冠军的定义,没输过,开两个set,一个存赢家,一个存输家,若赢家没在输家名单里出现过,则cnt++; 产生冠军当且仅当cnt=1; 关于实现: 实现过程 阅读全文
posted @ 2021-11-02 16:20 liyishui 阅读(21) 评论(0) 推荐(0) 编辑
摘要:拓扑排序的开棺题: 这题的坑点是: 多组数据,记得输出换行符(题目没讲) 要求输出的时候冠军的编号在前,建边的时候逆向一下,从赢的指向输的可以保证赢家在前; 开一个优先队列可以保证序号小的在前; -- #include <iostream> #include <math.h> #include <s 阅读全文
posted @ 2021-11-02 15:36 liyishui 阅读(26) 评论(0) 推荐(0) 编辑