Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
1819 | 18级王浩宇 | 【S】T1最大后缀值个数 | C++ | 运行超时 | 70 | 2000 MS | 20804 KB | 730 | 2020-11-16 10:11:47 |
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10; int n; int fa[N],v[N]; int ans[N]; bool vis[N]; int dfs(int p) { vis[p]=true; for(int i=p;i;i=fa[i]) { if(v[i]==v[p]) ans[p]++; if(v[i]>v[p]) { if(!vis[i]) dfs(i); ans[p]+=ans[i]; break; } } return ans[p]; } signed main() { scanf("%lld",&n); for(int i=2;i<=n;i++) scanf("%lld",&fa[i]); for(int i=1;i<=n;i++) scanf("%lld",&v[i]); for(int i=1;i<=n;i++) { if(!vis[i]) dfs(i); printf("%lld ",ans[i]); } return 0; }