- #include
- #include
- #include
- #include
- #include using namespace std;
- #definemaxn 100005#defineINF 0x7fffffffintn,ch[maxn][2],dis[maxn],ans;
- int l[maxn],r[maxn],root;
- bool if_[maxn];
- map<int,int>ma;
- map<int,bool>maa;
- inline void in(int&now)
- {
- intif_z=1;now=0;
- charCget=getchar();
- while(Cget>'9'||Cget<'0')
- {
- if(Cget=='-') if_z=-1;
- Cget=getchar();
- }
- while(Cget>='0'&&Cget<='9')
- {
- now=now*10+Cget-'0';
- Cget=getchar();
- }
- now*=if_z;
- }
- voiddfs(intnow,intl,int r)
- {
- if(l>r)return ;
- if(dis[now]>=l&&dis[now]<=r)
- {
- if(!maa[dis[now]])
- {
- ans+=ma[dis[now]];
- maa[dis[now]]=true;
- }
- }
- if(ch[now][0]!=-1) dfs(ch[now][0],l,min(dis[now]-1,r));
- if(ch[now][1]!=-1) dfs(ch[now][1],max(l,dis[now]+1),r);
- }
- int main()
- {
- in(n);
- for(inti=1;i<=n;i++)
- {
- in(dis[i]),in(ch[i][0]),in(ch[i][1]),ma[dis[i]]++;
- if(ch[i][0]!=-1) if_[ch[i][0]]=true;
- if(ch[i][1]!=-1) if_[ch[i][1]]=true;
- }
- for(inti=1;i<=n;i++)
- {
- if(!if_[i])
- {
- root=i;
- break;
- }
- }
- dfs(root,0,INF);
- cout<ans;
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2063852.html