社区讨论
47pts玄关求调
P3621[APIO2007] 风铃参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mkfix5o2
- 此快照首次捕获于
- 2026/01/15 22:07 上个月
- 此快照最后确认于
- 2026/01/18 15:25 上个月
CPP
#include<bits/stdc++.h>
using namespace std;
int n,minn=1e9,maxx,ans;
int a[100005][2];
void dfs(int x,int d){
if(x==-1){
minn=min(minn,d);
maxx=max(maxx,d);
return ;
}
dfs(a[x][0],d+1);
dfs(a[x][1],d+1);
}
int dfs2(int u,int d){
if(u==-1) return d!=minn;
int x=dfs2(a[u][0],d+1);
int y=dfs2(a[u][1],d+1);
if(x==2&&y==2) return -1;
if((x==2&&y==1)||(x==0&&y==1)) ans++;
if(x==2||y==2||x+y==1) return 2;
if(x+y==0) return 0;
return 1;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i][0]>>a[i][1];
dfs(1,0);
if(maxx-minn>1) cout<<-1;
if(maxx==minn) cout<<0;
else{
int x=dfs2(1,0);
if(x==-1) cout<<-1;
else cout<<ans;
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...