hdu - 4601 - Letter Tree(二)

2014-11-23 22:57:52 · 作者: · 浏览: 10
u], cmp) - dep[h].begin() + depBefore[h-1]; return RMQ(L, R); } int main() { getPow26(); scanf("%d", &T); while(T--){ init(); //为输入,bfs和获取trip树结点的字典序初始化 read(); //读入数据 bfs(); //求得树各结点的深度,建trip getTripRank(0); //获取trip树结点的字典序 init2(); //为dfs初始化 dfs(1); //求得in[], maxChild[], tail[], Hash[], Rank[], dep[] get(); //求得a[], depBefore[] initRMQ(); while(M--){ int u, m; scanf("%d%d", &u, &m); int des = solve(u, m); //求得目标结点 if(des != -1) printf("%d\n", (int)(Hash[des] - (long long)Hash[u] * pow26[m] % mod + mod) % mod); else puts("IMPOSSIBLE"); } } return 0; }