就是这句我注掉的代码,如果加上就很正常的TLE掉,但是如果注掉却会RE,这是个啥啊。
inline void dfs(int x,int fa){
for(int i=hea[x];i;i=nex[i]){
int y=ver[i];if(y==fa)continue;
dis[y]=dis[x]+edge[i];
if(dis[y]<=r[y]+now){ans++;dfs(y,x);}
// else dfs(y,x);
}
}
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+10;
const int mod=1e9;
typedef long long ll;
int ver[2*N],hea[N],nex[2*N],edge[2*N];
int n,T,tot,now;
int a[N],c[N],r[N];
ll ans,anss,dis[N];
inline void add(int x,int y,int z){
ver[++tot]=y,nex[tot]=hea[x],hea[x]=tot,edge[tot]=z;
}
inline void dfs(int x,int fa){
for(int i=hea[x];i;i=nex[i]){
int y=ver[i];if(y==fa)continue;
dis[y]=dis[x]+edge[i];
if(dis[y]<=r[y]+now){ans++;dfs(y,x);}
// else dfs(y,x);
}
}
int main(){
// freopen("flower.in","r",stdin);
// freopen("flower.out","w",stdout);
scanf("%d%d",&T,&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&a[i],&c[i],&r[i]);
if(i==1){
printf("0\n");continue;
}
anss=ans%mod;a[i]=a[i]^anss;now=r[i];
add(a[i],i,c[i]);add(i,a[i],c[i]);
dfs(i,0);
printf("%lld\n",ans);
}
return 0;
}