社区讨论

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 条回复,欢迎继续交流。

正在加载回复...