摘要: 题意:给一棵n个结点的无根树染色,求使每个结点距离为k的范围内至少有一个被染色的结点的总染色方法数目 分析:首先我们定义: 对于结点v, 如果存在一个黑色结点u距离v不超过k,则结点v被“控制” 首先将无根树转换成以1为根的有根树,设dp[v][i]为对于以v为根的子树,距离v最近的黑色结点深度为i 阅读全文
posted @ 2016-12-03 21:00 kiraa 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 恢复内容开始 C: 由mex函数性质可知 ,对任意一个区间,都需要从0开始依次填1,2直到填满,那么,所有区间最小mex的最大值取决于最短区间长度k。 构造a数组之需要从0~k-1依次填数,即a[i] = i%k 代码如下: D: 思路是预处理出每个结点到根结点的距离dist(x), 然后对每个结点 阅读全文
posted @ 2016-11-29 14:08 kiraa 阅读(123) 评论(0) 推荐(0) 编辑
摘要: A B 略 C:二分,贪心 设d(i, v)为 剩余油量为v时,车开距离i 所需要的最小时间,使用线性规划不难算出: D: 一道堪比A、B的水题,按顺序输出剩下的可以放船的位置直到不能装下所有船为止 E:贪心,数状数组维护前缀和 分析题意我们可以发现,由于一个下级只能有一个直接上级,一个上级可以有多 阅读全文
posted @ 2016-11-24 11:26 kiraa 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 原题链接:http://codeforces.com/gym/101147/problem/F 题意:n*n的棋盘,给m个主教的坐标及其私有距离p,以及常数C,求位于同一对角线上满足条件:dist(i, j) >= p[i]^2 + p[j]^2 + C 的主教集合的元素个数最大值。 解题思路: 上 阅读全文
posted @ 2016-11-22 15:01 kiraa 阅读(254) 评论(0) 推荐(0) 编辑
摘要: A、B略 C题 ——贪心,二分查找: 对于每一个a[i], 在d中二分查找 s-b[i],注意不要忘记计算速度为x时需要花费的最小时间,以及整数范围为64位整数 D 思路很简单,注意细节即可 E题:首先使用并查集将相同颜色的结点缩成一点,此时树中结点黑白相间,只需要求出树的直径(最长路)除以2就是答 阅读全文
posted @ 2016-11-19 00:37 kiraa 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 typedef long long LL; 10 11 12 struct Bign 13 { 14 static con... 阅读全文
posted @ 2016-11-17 23:58 kiraa 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int maxnode = 10000; 9 const int _size = 26; 10 11 struct ACauto { 12 int ch[maxnode][_size... 阅读全文
posted @ 2016-11-11 15:40 kiraa 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 #include 4 5 const int maxn = 10000; 6 int f[maxn]; 7 char P[maxn]; 8 char T[maxn]; 9 void getfail(char* P, int *f) { 10 f[0] = f[1] = 0; 11 int n = strle... 阅读全文
posted @ 2016-11-10 09:42 kiraa 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 首先我们可以发现: 1.若两个字符串A、B不相等,且它们的公共前缀为S,则它们的比较次数为:2 * len(S) + 1; 2.若两个字符串相等,设为A,则它们的比较次数为 2 * ( len(A) + 1 ) //注意考虑结束符'\0' 那么我们可以建立前缀树,在向前缀树中插入字符串的 阅读全文
posted @ 2016-11-09 11:52 kiraa 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 令d(i)表示从字符i开始的字符串(即S[i...L])的分解方案数。 则状态转移方程: d(i) = sum{d(i+len(x)) | x为S[i..L]的前缀} 阅读全文
posted @ 2016-11-09 11:37 kiraa 阅读(176) 评论(0) 推荐(0) 编辑