Codeforces Round #130 (Div. 2)

A. Dubstep

  • 字符串模拟。
  • string.find()用法
string str;
size_t pos = str.find("WUB"); // 返回匹配的第一个位置
size_t nxt = str.find("WUB", pos); // 返回大于等于pos的第一个匹配位置
// 如果没有找到,则返回std::string::npos

B. Solitaire

  • \(dp(i,j,k)\)表示是否能到达倒三张牌分别为\(i,j,k\)的状态。

C. Police Station

  • 对于每个点处理出到1和n的最短距离以及对应的方案数。
  • 若把警察局放置在点\(u\),根据最短距离可以计算出经过点\(u\)的路径条数,并且每条路径上被覆盖的边为2。
  • 点1、点n需要特殊判断。

D. Prizes, Prizes, more Prizes

  • 模拟题意做即可。

E. Blood Cousins

  • 对于每个询问\(v_i, p_i\),先求出祖先\(u\),那么询问相当于求在子树\(u\)中,深度为\(dep[v_i]\)的点数,按照dfs序继续将问题转化成区间\([l,r]\)值为\(dep[v_i]\)的个数,这个离线分块做即可。
posted @ 2016-10-26 21:15  mcginn  阅读(138)  评论(0编辑  收藏  举报