输出均为0
感觉是初始化或叶子节点处理的问题
代码:
#include<bits/stdc++.h>
using namespace std;
//#pragma GCC optimize("Ofast")
typedef long long ll;
typedef pair<int,int> pii;
#define mk(a,b) make_pair((a),(b))
#define int ll
const int maxn=1010;
const int inf=1e12;
const int mod=1e9+7;
int n,m,k,ans;
int f[maxn][5];
inline int read() {
int s=0,w=1;
char ch=getchar();
while(!isdigit(ch)) {
if(ch=='-') w=-1;
ch=getchar();
}
while(isdigit(ch)) s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void write(int x) {
if(x<0) x=-x,putchar('-');
if(x>9) write(x/10);
putchar('0'+x%10);
}
vector<int> g[maxn];
inline void dfs(int u,int fa) {
int mx1=0,mx2=0;
if(g[u].size()==0) {
f[u][1]=f[u][2]=1;
}
for(auto v:g[u]) {
if(v==fa) continue;
dfs(v,u);
f[u][0]+=f[v][4];
f[u][1]+=f[v][3];
mx1=max(mx1,f[v][3]-f[v][0]);
f[u][2]+=f[v][2];
mx2=max(mx2,f[v][2]-f[v][1]);
f[u][3]+=f[v][2];
f[u][4]+=f[v][3];
}
f[u][0]++;
f[u][1]-=mx1;
f[u][2]-=mx2;
f[u][1]=min(f[u][0],f[u][1]);
f[u][2]=min(f[u][1],f[u][2]);
f[u][3]=min(f[u][2],f[u][3]);
f[u][4]=min(f[u][3],f[u][4]);
}
signed main() {
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=read();
for(int i=2;i<=n;++i) {
int v=read();
g[v].push_back(i);
g[i].push_back(v);
}
dfs(1,0);
// for(int i=1;i<=n;++i)
// cout<<f[i][2]<<endl;
write(f[1][2]),puts("");
return 0;
}