RE(Sigsegv)求解
查看原帖
RE(Sigsegv)求解
529953
百步穿杨楼主2024/6/29 16:23
#include<bits/stdc++.h>
using namespace std;
const int N=51010;
int T,n;
int maxx,minn;
int ver[N],hd[N],nxt[N],val[N],idx=0;
void add(int a,int b,int c){
	idx++;
	ver[idx]=b;
	val[idx]=c;
	nxt[idx]=hd[a];
	hd[a]=idx;
	return ;
}
void bfs(int s){
	int dis[N],vis[N];
	queue<int> q;
	memset(dis,-0x3f3f3f3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[s]=0;
	vis[s]=1;
	q.push(s);
	while(!q.empty()){
		int x=q.front();
		q.pop();
		vis[x]=0;
		for(int i=hd[x];i;i=nxt[i]){
			int y=ver[i];
			if(dis[y]<dis[x]+val[i]){
				dis[y]=dis[x]+val[i];
				if(vis[y]==0){
					vis[y]=1;
					q.push(y);
				}
			}
		}
	}
	printf("%d\n",dis[maxx]);
	return ;
}
int main(){
scanf("%d",&T);
while(T--){
	scanf("%d",&n);
	memset(ver,0,sizeof(ver));
	memset(hd,0,sizeof(hd));
	memset(nxt,0,sizeof(nxt));
	memset(val,0,sizeof(val));
	idx=0;
	minn=0x3f3f3f3f,maxx=-0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		int x,y,e;
		scanf("%d%d%d",&x,&y,&e);
		add(x,y+1,e);
		maxx=max(maxx,y+1);
		minn=min(minn,x);
	}
    
    //
	for(int i=1;i<=maxx;i++){
		add(i,i-1,-1);
		add(i-1,i,0);
	}
    //这段注释掉就是WA,没发现问题
	bfs(0);
}	
	return 0;
}
2024/6/29 16:23
加载中...