两个样例均输出 2。
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,re,x,v;
struct tree{
int l,r,sum;
}a[100001];
int main(){
freopen("end.in","r",stdin);
freopen("end.out","w",stdout);
cin>>n>>m;
re=m;
for(int i=1;i<=n;i++) cin>>a[i].l>>a[i].r;
for(int i=1;i<=m;i++) cin>>x>>v,a[x].sum=v;
for(int i=1;re>1;i++){
for(int j=1;j<=n;j++){
if(j==1){
if(a[a[1].l].sum) a[1].sum=max(a[1].sum,a[a[1].l].sum)-min(a[1].sum,a[a[1].l].sum),re--;
if(a[a[1].r].sum) a[1].sum=max(a[1].sum,a[a[1].r].sum)-min(a[1].sum,a[a[1].r].sum),re--;
}
a[j].sum=max(a[a[j].l].sum,a[a[j].r].sum)-min(a[a[j].l].sum,a[a[j].r].sum);
if(a[a[j].l].sum&&a[a[j].r].sum){
re--;
if(a[a[j].l].sum==a[a[j].r].sum) re--;
}
}
}
cout<<a[1].sum;
}