为什么会发生RE?
查看原帖
为什么会发生RE?
169137
k,火魂楼主2020/6/1 20:57

就是这句我注掉的代码,如果加上就很正常的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;
}
2020/6/1 20:57
加载中...