dijkstra部分:
第一版
void dij(int maxn){
q=priority_queue<PII,vector<PII>,greater<PII>>();
for (int i=1;i<=n;i++){
dis[i]=0x3f3f3f3f;
vis[i]=0;
}
dis[1]=0;
q.push(make_pair(0,1));
while (!q.empty()){
int u=q.top().second;
q.pop();
if (vis[u]) continue;
vis[u]=true;
for (int i=head[u];i;i=g[i].nxt){
int v=g[i].to,w=g[i].value,f=g[i].f;
if (f<maxn) continue;
if (dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push(make_pair(dis[v],v));
}
}
}
}
第二版
void dij(int maxn){
q=priority_queue<PII,vector<PII>,greater<PII>>();
// for (int i=1;i<=n;i++){
// dis[i]=0x3f3f3f3f;
// vis[i]=0;
// }
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[1]=0;
q.push(make_pair(0,1));
while (!q.empty()){
int u=q.top().second;
q.pop();
if (vis[u]) continue;
vis[u]=true;
for (int i=head[u];i;i=g[i].nxt){
int v=g[i].to,w=g[i].value,f=g[i].f;
if (f<maxn) continue;
if (dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push(make_pair(dis[v],v));
}
}
}
}
两版在lg上都AC,但在其他平台上第一版有问题,把for循环重置数组改成第二版的两个memset就好了,有没有大佬告诉孩子为什么啊?