2 条题解
-
0
zjy代码(scy微改):
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int dep[N],fa[N],sonsiz[N]; int main() { int n;scanf("%d",&n); memset(dep,0,sizeof(dep)); memset(sonsiz,0,sizeof(sonsiz)); for(int i=1,x;i<=n;i++) { scanf("%d",&fa[i]); dep[i]=dep[fa[i]]+1; sonsiz[fa[i]]++; } int m=0;for(int i=1;i<=n;i++){if(sonsiz[i]==0)m++;} for(int i=1,x;i<=m;i++) { scanf("%d",&x); if(i==m){puts("0");continue;} x=fa[x];//目标是让x指向最后一个无法确认的点 while(sonsiz[x]==1&&x!=0)x=fa[x]; sonsiz[x]--; printf("%d\n",dep[x]+1); } return 0; } -
0
zjy代码(scy微改):
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int dep[N],fa[N],sonsiz[N]; int main() { int n;scanf("%d",&n); memset(dep,0,sizeof(dep)); memset(sonsiz,0,sizeof(sonsiz)); for(int i=1,x;i<=n;i++) { scanf("%d",&fa[i]); dep[i]=dep[fa[i]]+1; sonsiz[fa[i]]++; } int m=0;for(int i=1;i<=n;i++){if(sonsiz[i]==0)m++;} for(int i=1,x;i<=m;i++) { scanf("%d",&x); if(i==m){puts("0");continue;} x=fa[x];//目标是让x指向最后一个无法确认的点 while(sonsiz[x]==1&&x!=0)x=fa[x]; sonsiz[x]--; printf("%d\n",dep[x]+1); } return 0; }
- 1
信息
- ID
- 2583
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 124
- 已通过
- 30
- 上传者