摘要: 题意:给你一颗树 1为根节点 一开始所有叶子被占领 被占领的节点每个单位时间会生产一个士兵向根节点走每个点i如果被di个士兵路过(士兵路过一个点不会停住 会继续往根节点走)就会被占领问所有点都被占领要多久题解:40分算法: 对与一个点i可以二分该点的结束时间 然后枚举计算该点子树对该点的贡献 时间复杂度O(n^2log(n))正解: 对每个节点建平衡树 按被占领顺序维护所有子树的节点 这样计算一个点的结束时间就能在平衡树上二分 时间复杂度O(nlog(n)) 阅读全文
posted @ 2014-03-21 22:17 g_word 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张n个点的无向图 i连向i-1和i-2 边权为wij 有两个点权ai和bi ai为0或1在给m个操作1.将ai异或12.将区间x到y的点都填上一个数ci 使得Σ(bi*(ai^ci))+Σ((ci^cj)*wij) 输出最小值题解:30分算法: 动规 f[i][j]表示前i个点后两个点的ci状态为j的最小值 维护一次n^2但每次修改就要整个dp重做 特别浪费 时间复杂度O(nm)正解: 用线段树维护f数组 线段树一段维护前两点和后两点状态为i时的最小值 这样每次修改log(n) 时间复杂度O(mlog(n)) 阅读全文
posted @ 2014-03-21 21:08 g_word 阅读(236) 评论(0) 推荐(0) 编辑