代码如下,求助帮忙解释一下为什么内存爆128MB
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
const int inf=1e8;
const double eps=1e-7;
int n,m,k,a,b,vis[5005],ans;
double dis[5005],E;//t到i的最短路
struct edge{
int v;
double val;
edge(int a,double b){v=a;val=b;}
};
vector<edge>g[5005],G[5005];
struct node{
int u;
double dis;
node(int a,double b){u=a;dis=b;}
bool operator <(const node &x)const{return dis>x.dis;}
};
void dij(int s){
for(int i=1;i<=n;i++) dis[i]=inf,vis[i]=0;
dis[s]=0;
priority_queue<node>q;
q.push(node{s,dis[s]});
while(!q.empty()){
int u=q.top().u;
q.pop();
if(vis[u]) continue;
vis[u]=1;
for(int i=0;i<G[u].size();i++){
int v=G[u][i].v;
int w=G[u][i].val;
if(dis[u]+w<=dis[v]){
dis[v]=dis[u]+w;
q.push(node{v,dis[v]});
}
}
}
}
struct p{//估价函数
int v;
double g,h;
p(int a,double b,double c){v=a;g=b;h=c;}
bool operator <(const p &x)const{return g+h>x.g+x.h;}
};
void astar(int s,int t){
priority_queue<p>q;
q.push(p{s,0,0});
while(!q.empty()){
p x=q.top();
int u=q.top().v;
q.pop();
if(x.g+x.h-eps>E) break;
if(x.v==n){
ans++;
E-=(x.g+x.h);
continue;
}
for(int i=0;i<g[u].size();i++){
if(x.g+g[u][i].val<=E)
q.push(p{g[u][i].v,x.g+g[u][i].val,dis[g[u][i].v]});
}
}
}
int main(){
scanf("%d%d%lf",&n,&m,&E);
for(int i=1;i<=m;i++){
int u,v;;
double w;
scanf("%d%d%lf",&u,&v,&w);
g[u].push_back(edge{v,w});
G[v].push_back(edge{u,w});//反图
}
dij(n);
astar(1,n);
printf("%d\n",ans);
return 0;
}