1 条题解
-
0
思路
不难想到,因为次数有 ,深度越深,对答案的影响越大。因为深度深的会改变深度浅的,深度浅的又会改变深度更浅的,所以我们只需要统计出每个深度的点的权值和,在按深度从深到浅,看看答案的正负,如果是正的,就输出
+,负的就输出-,否则继续枚举。如果枚举还不能得到答案,就证明所有的点都是0,输出0。实现
#include<bits/stdc++.h> #define Max 250010 #define inf 1000000000 using namespace std; long long n,a[Max],p[Max]; long long sum[Max],dis[Max]; int flag; signed main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); dis[i]=inf;//初始化 } dis[1]=0; for(int i=2;i<=n;i++){ scanf("%lld",&p[i]); dis[p[i]]=i+1;//预处理深度 } for(int i=1;i<=n;i++) if(dis[i]<inf) sum[dis[i]]+=a[i]; for(int i=n;~i;i--){ if(sum[i]>0) return printf("+"),0; if(sum[i]<0) return printf("-"),0; } printf("0"); return 0; }
- 1
信息
- ID
- 11519
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者