摘要: dfs序。 用l[u]和r[u]表示进入u和出去u的时间。用树状数组维护前缀和,l[u]处加1,r[u]处减1。 询问的是树根到自己u的距离,就相当于l[u]处的前缀和。为什么呢? 如果一个节点v在树根到u的路径上,就会在l[v]处加1。如果不在,如果编号小于u,l[v]和r[v]处相消。 如果大于u则l[v]大于l[u]。W u操作则是将l[u]处减1,将r[u]处加1。这样u就不会影响... 阅读全文
posted @ 2016-05-10 17:56 invoid 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 状态空间搜索?用map判重。 #include #include #include #include #include using namespace std; int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; struct Status { int a[4][4]; Status move(int x,int y,int dir) {... 阅读全文
posted @ 2016-05-10 17:20 invoid 阅读(170) 评论(0) 推荐(0) 编辑
摘要: %%%。设f(x)=a0+a1x+a2x^2+ … + anx^n.求f(x)=0的x。 数据范围很大,高精度只能骗分。 运用类似hash的思想。 如果这个等式mod p 还成立(p为质数)那它很可能就是成立。 多取几个质数(大质数更优)就可以几乎确定了。(70分) 100分时m很大,不能都算出来。 仔细分析,如果在模p时f(x)!=0,则f(x+p)肯定也不是解。这样一来只需枚举从1到... 阅读全文
posted @ 2016-05-10 15:32 invoid 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 方向dfs判定是否可行,spfa跑最短路。 noip水题,wa好几次。 #include #include #include using namespace std; const int maxn = 10000 + 10; const int maxm = 200000 + 10; int g[maxn],v[maxm],next[maxm],eid; int g1[maxn]... 阅读全文
posted @ 2016-05-10 08:24 invoid 阅读(161) 评论(0) 推荐(0) 编辑