Dij
bool visit[MAXN]; priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > que; pair<int, int> cnt; memset(visit, false, sizeof(visit)); visit[st] = true; que.push(make_pair(0, st)); while (!que.empty()) { cnt = que.top(); que.pop(); int ucost = cnt.first; int u = cnt.second; for (int i = Head[u]; i; i = nxt[i]) { int v = to[i]; if (visit[v]) { continue; } visit[v] = true; if (dis[v] > dis[u] + cost[i]) { dis[v] = dis[u] + cost[i]; que.push(make_pair(dis[v], v)); } } }
SPFA
bool visit[MAXN]; queue<int> que; memset(visit, false, sizeof(visit)); dis[st] = 0, visit[st] = true; que.push(st); while (!que.empty()) { int u = que.front(); que.pop(); visit[u] = false; for (int i = Head[u]; i; i = nxt[i]) { int v = to[i]; if (dis[v] > dis[u] + cost[i]) { dis[v] = dis[u] + cost[i]; if (!visit[v]) { visit[v] = true; que.push(v); } } } }