摘要: 首先说明这题不是在线算法,也不能说是离线算法,就是一个预处理能够把所有的结果全部算出来再O(1)的时间得到答案。首先我们要将一这种上下属的关系通过一个dfs转化为一维的关系,相同属性(指为同一个人的下属)的话,那么在物理上就是连续的。这样处理后,我们考虑一个员工能够被替代的话,那么替代他的人的能力值就一定是比他高的,因此我们按照能力值对所有的人进行一次排序,能力值相同的就按照标号从小到大排,这样的话,就能够保证每次询问一个点时,线段树中的所有值都是满足上下属关系的。排好序后,再从左到右扫描一遍,每次先查询如果解雇这个员工,谁将成为他的最佳替代者。代码如下:#include <cstdli 阅读全文
posted @ 2012-08-15 22:31 沐阳 阅读(728) 评论(0) 推荐(0) 编辑
摘要: 首先将没有特殊点的所有的情况都计算出来,再将给定的点都计算到左上角的标记点,最后查看有多少个点已经被覆盖了,减去该部分,最后用快速幂输出结果,注意这里要用long long。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include< 阅读全文
posted @ 2012-08-15 16:54 沐阳 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 简单矩阵...代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <iostream>using namespace std;unsigned int temp[5][5] = { {0, 0, 0, 0, 0}, {0, 2, 3, 1, 1}, {0, 1, 2, 3, 1}, {0, 1, 1, 2, 3}, {0, 3, 1, 1, 2}};unsigned int fix(unsigned int x){ if (x > 0xff) { x ^= 0 阅读全文
posted @ 2012-08-15 11:21 沐阳 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 记录每个节点从四个方向来的最优值,用了那个spfa后,因为要标记入队,所以就会牵涉到一个节点的自环现象,所以这里就直接在队列里面记录其当前距离,不进行队列优化,也过了。该题的边竟然是双向的。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#include <queue>using namespace std;typedef long long int Int64;int N, M, idx, mp[255], head[1500 阅读全文
posted @ 2012-08-15 10:05 沐阳 阅读(358) 评论(0) 推荐(0) 编辑