Codeforces860E Arkady and a Nobody-men -- 单调栈 + 倍增
来源:互联网 发布:扁平插画 知乎 编辑:程序博客网 时间:2024/06/08 18:06
不会数据结构。。。只能想其他做法。。。
令
显然点
我们按深度从小到大枚举每个点,那么一个点的答案就等于它父亲的答案加上与它同深度的点对它的贡献。
对于同一深度的点,将它们按
考虑如何计算第
由于这些点与第
代码
#include<vector>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define N 500010#define M 20#define ll long long ll Ans[N];vector<int>g[N],e[N];int i,j,k,n,m,p,l;int a[N],b[N],c[N];int x,Rt,d[N],f[N][M];inline void Dfs(int x){ g[d[x]].push_back(x); for(int i=0;i<e[x].size();i++) d[e[x][i]]=d[x]+1,Dfs(e[x][i]);}inline int Lca(int x,int y){ if(d[x]<d[y])swap(x,y); for(int i=M-1;i>=0;i--)if(d[f[x][i]]>=d[y])x=f[x][i]; if(x==y)return x; for(int i=M-1;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i]; return f[x][0];}inline void Solve(){ ll sum=0; for(int j=0;j<g[i].size();j++){ int x=g[i][j]; if(!j)a[l=1]=x,b[1]=c[1]=0;else{ while(1){ int L=Lca(a[l],x); if(b[l]<=d[L]){ a[++l]=x;b[l]=d[L]+1;c[l]=j; break; } sum-=1ll*(c[l]-c[l-1])*b[l]; l--; } sum+=1ll*(c[l]-c[l-1])*b[l]; } Ans[x]+=sum; }}int main(){ scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&x); if(!x)Rt=i,f[i][0]=i;else f[i][0]=x,e[x].push_back(i); } Dfs(Rt); for(j=1;j<M;j++) for(i=1;i<=n;i++) f[i][j]=f[f[i][j-1]][j-1]; for(i=1;i<n;i++){ if(!g[i].size())break; for(j=0;j<g[i].size();j++)Ans[g[i][j]]+=Ans[f[g[i][j]][0]]+i; Solve();reverse(g[i].begin(),g[i].end());Solve(); } for(i=1;i<=n;i++)printf("%I64d ",Ans[i]); return 0;}
阅读全文
2 0
- Codeforces860E Arkady and a Nobody-men -- 单调栈 + 倍增
- [树链剖分 线段树] Codeforces 860E. Arkady and a Nobody-men
- Men and Grief
- Wemen and men
- BZOJ 2286 SDOI2011 消耗战 倍增LCA+单调栈
- bzoj-2286 消耗战【虚树+倍增lca+单调栈】
- HDU 5875 Function(单调栈+在线倍增法)
- HDU 5726--GCD【倍增】【单调栈】【STL-map】
- Remember ahead and afterward matrimony a matron have to reside away from the 10 men
- Three Men At A Table
- men
- Mike and Feet(单调栈)
- Spyder jacket for both men and women
- nobody knows u r a dog
- The Men Who Started a Thinking Revolution
- 在线LCA 倍增法 Codeforces Round #294 (Div. 2) E - A and B and Lecture Rooms
- Codeforces Round #294 (Div. 2) E. A and B and Lecture Rooms(倍增LCA+树形DP)
- Codeforces Round #294 (Div. 2)-E. A and B and Lecture Rooms(LCA倍增)
- Scala模拟表查询例子
- 关于解析json串(串里有汉字)一些问题解决方案!
- onChanges钩子使用
- 你还在为机密文件如何安全销毁而发愁么?
- 直播知识点
- Codeforces860E Arkady and a Nobody-men -- 单调栈 + 倍增
- HDU 5952 搜索
- STL之Iterator
- ffmpeg一些东西设置
- C++中的异常处理开销(13)---《More Effective C++》
- 洛谷P2024 食物链 (POJ 1182)
- Androidbby
- java抽象类练习题
- HDU-3746 Cyclic Nacklace (活用KMP中next数组)