ICPCCamp 2016 Day 1 - A Aho-Corasick Automaton (主席树)
2016-04-14 13:45
483 查看
#include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; #define N 200020 #define M 200020 int fst , nxt[M], vv[M], e; void init() { memset(fst, -1, sizeof fst); e = 0; } void add(int u, int v) { vv[e] = v, nxt[e] = fst[u], fst[u] = e++; } int p , c ; int n; int f ; int rt ; int ch[N*20][2], s[N*20], sz; #define md (ll + rr >> 1) int update(int i, int x, int v, int ll, int rr) { int k = ++sz; ch[k][0] = ch[i][0], ch[k][1] = ch[i][1]; if(ll == rr) { s[k] = v; return k; } if(x <= md) ch[k][0] = update(ch[i][0], x, v, ll, md); else ch[k][1] = update(ch[i][1], x, v, md + 1, rr); return k; } int query(int i, int x, int ll, int rr) { if(ll == rr) return s[i]; if(x <= md) return query(ch[i][0], x, ll, md); else return query(ch[i][1], x, md + 1, rr); } void build() { queue<int> q; q.push(0); f[0] = 0; while(!q.empty()) { int u = q.front(); q.pop(); for(int i = fst[u]; ~i; i = nxt[i]) { int v = vv[i]; f[v] = query(rt[f[u]], c[v], 1, n); q.push(v); } rt[u] = rt[f[u]]; for(int i = fst[u]; ~i; i = nxt[i]) { int v = vv[i]; rt[u] = update(rt[u], c[v], v, 1, n); } } } int main() { scanf("%d", &n); init(); for(int i = 1; i <= n; ++i) { scanf("%d", &p[i]); add(p[i], i); } for(int i = 1; i <= n; ++i) scanf("%d", &c[i]); build(); for(int i = 1; i <= n; ++i) printf("%d%c", f[i], i == n? '\n': ' '); return 0; }
相关文章推荐
- LeetCode 141 -Linked List Cycle ( JAVA )
- 10倍效率的程序员的好习惯,你有几个?
- 正则表达式初探-获取<p class='demo'>hello icketang</p>内部文案
- 用Collections.sort方法对list排序
- hdu1260Tickets(动态规划)
- python学习笔记(excel中处理日期格式)
- 修改UISegmentrol各种属性
- 70. Climbing Stairs
- 删除已经配置的类库和移除CocoaPods
- 正则表达式-实现trim(str)方法,过滤字符串首尾空白
- Linux内存点滴:用户进程内存空间
- leetcode ——29——Divide Two Integers
- 【论文笔记】One Millisecond Face Alignment with an Ensemble of Regression Trees
- BZOJ 1059 矩阵游戏 二分图最大匹配
- win10 安装ubuntu on windows
- Jquery Easyui Tab中表单重复提交问题解决
- DB2错误代码大全
- 正则表达式-检测是否是本地电话,如010-12345678,0418-12345678
- AOAPC:Chapter1Example1 (UVa 11292)
- android studio 把jdk版本设置为1.7