BZOJ 2754: [SCOI2012]喵星球上的点名
2017-09-18 08:44
399 查看
此题似乎有很多种做法?
不管了,反正我用AC自动机+暴力过了QAQ
用map来记录孩子节点就好
不管了,反正我用AC自动机+暴力过了QAQ
用map来记录孩子节点就好
#include<bits/stdc++.h> using namespace std; const int N=100010; inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')f=-1; ch=getchar();} while(ch>='0' && ch<='9'){x=(x<<1)+(x<<3)+ch-'0'; ch=getchar();} return x*f; } map<int,int>t ; vector<int>a ,s ; int tot,q ,he,ta,fail ,ans1 ,ans2 ; void ins(int u){ int n=read(),x=0; while(n--){ int y=read(); if(!t[x][y])t[x][y]=++tot; x=t[x][y]; } s[x].push_back(u); } void bulid(){ q[he=ta=0]=0; while(he<=ta){ int x=q[he++]; for(map<int,int>::iterator i=t[x].begin();i!=t[x].end();i++){ int o=i->first,k=fail[x]; if(x){ while(!t[k][o] && k)k=fail[k]; fail[i->second]=t[k][o]; } q[++ta]=i->second; } } } bool v ,b ; int V ,B ,vl,bl; void add(int x,int id){ for(int i=x;i;i=fail[i]) if(!v[i]){ v[i]=1; V[++vl]=i; for(int j=0;j<s[i].size();++j) if(!b[s[i][j]]){ b[s[i][j]]=1; B[++bl]=s[i][j]; ans1[s[i][j]]++,ans2[id]++; } } else break; } void solve(int u){ int x=0; for(int i=0;i<a[u].size();++i){ int y=a[u][i]; while(!t[x][y] && x) x=fail[x]; x=t[x][y]; add(x,u); } while(vl)v[V[vl--]]=0; while(bl)b[B[bl--]]=0; } int main(){ int n=read(),m=read(); for(int i=1;i<=n;++i){ int x=read(),y; while(x--) y=read(),a[i].push_back(y); a[i].push_back(-1); x=read(); while(x--) y=read(),a[i].push_back(y); } for(int i=1;i<=m;++i) ins(i); bulid(); for(int i=1;i<=n;++i) solve(i); for(int i=1;i<=m;++i) printf("%d\n",ans1[i]); for(int i=1;i<=n;++i) printf("%d%c",ans2[i],i==n?'\n':' '); return 0; }
相关文章推荐
- bzoj 2754: [SCOI2012]喵星球上的点名
- BZOJ 2754: [SCOI2012]喵星球上的点名
- [BZOJ2754][SCOI2012]喵星球上的点名
- BZOJ 2754: [SCOI2012]喵星球上的点名 后缀数组
- [BZOJ2754][SCOI2012]喵星球上的点名
- BZOJ 2754([SCOI2012]喵星球上的点名-后缀数组统计序列集合中子序列出现次数)
- BZOJ 2754 SCOI2012 喵星球上的点名 fail树+set启发式合并
- bzoj 2754: [SCOI2012]喵星球上的点名 (fail树+树状数组+lca+dfs序)
- bzoj 2754: [SCOI2012]喵星球上的点名【AC自动机】
- bzoj 2754 [SCOI2012]喵星球上的点名 后缀数组+莫队
- BZOJ 2754: [SCOI2012]喵星球上的点名 [AC自动机+map+暴力]
- bzoj 2754 [SCOI2012]喵星球上的点名(后缀数组)
- bzoj2754 [SCOI2012]喵星球上的点名(后缀数组+暴力)
- AC日记——[SCOI2012]喵星球上的点名 bzoj 2754
- bzoj 2754: [SCOI2012]喵星球上的点名
- BZOJ2754 SCOI2012喵星球上的点名
- 【BZOJ 2754】[SCOI2012]喵星球上的点名
- BZOJ 2754: [SCOI2012]喵星球上的点名
- 【BZOJ2754】【SCOI2012】喵星球上的点名 后缀数组优化暴力
- bzoj2754[SCOI2012]喵星球上的点名