数据是不是有点水
查看原帖
数据是不是有点水
399250
AffineRing楼主2020/12/26 15:46

样例没过作死交了一发然而AC了。

按照样例应该输出2,但我这个输出1,但是AC了。

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0,t=1;char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
	if(ch=='-')t=-1,ch=getchar();
	while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
	return x*t;
}
const int SIZE=600005;
int nxt[SIZE],ver[SIZE],head[SIZE],tot;
inline void add(int x,int y){
	ver[++tot]=y,nxt[tot]=head[x],head[x]=tot;
}
int n,ans,visit[SIZE],fath[SIZE],dep[SIZE],stac[SIZE],q[SIZE],cnt,vis[SIZE];
inline void BFS(){
	stac[1]=1,q[1]=1,dep[1]=1;
	int h=1,t=1;
	while(h<=t){
		int x=q[h];h++;
		for(register int i=head[x];i;i=nxt[i]){
			if(ver[i]!=fath[x])
				dep[ver[i]]=dep[x]+1,q[++t]=ver[i],stac[++cnt]=ver[i];
		}
	}
}
void Put(int x,int dis){
	if(dis>2)return;
	vis[x]=1;
	for(register int i=head[x];i;i=nxt[i])Put(ver[i],dis+1);
}
void Solve(){
	while(cnt){
		int x=stac[cnt];cnt--;
		if(!vis[x])Put(fath[fath[x]],0),ans++;
	}
}
int main(){
	int n=read();
	for(register int i=2;i<=n;i++)
		fath[i]=read(),add(fath[i],i),add(i,fath[i]);
	BFS(),Solve();
	printf("%d",ans);
	return 0;
}
2020/12/26 15:46
加载中...