spfa:
void spfa(){ queue<int> que; while(!que.empty()){que.pop();} que.push(s); vis[s]=1; while(!que.empty()){ int k=que.front(); que.pop(); vis[k]=0; int tt=head[k]; while(tt!=-1){ if(dis[g[tt].to]>dis[k]+g[tt].val){ dis[g[tt].to]=dis[k]+g[tt].val; if(!vis[g[tt].to]){ que.push(g[tt].to); vis[g[tt].to]=1; } } tt=g[tt].nxt; } } }
dijkstra:
void Dij(){ priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > que; while(!que.empty()){que.pop();} que.push({0,s}); while(!que.empty()){ pair<int,int> now=que.top(); int k=now.se; que.pop(); if(vis[k]) continue; vis[k]=1; int tt=head[k]; while(tt!=-1){ if(dis[g[tt].to]>dis[k]+g[tt].val){ dis[g[tt].to]=dis[k]+g[tt].val; if(!vis[g[tt].to]){ que.push({dis[g[tt].to],g[tt].to}); } } tt=g[tt].nxt; } } }