卡哇伊狗狗的spfa模板

来源:互联网 发布:sql case语句用法 编辑:程序博客网 时间:2024/06/06 06:37
const int INF = 0x3fffffff;const int maxn = 1010;int dis_max[maxn][maxn], dis_min[maxn][maxn];int paces_max[maxn][maxn], paces_min[maxn][maxn];bool visit[maxn];int queue[maxn], n;// flag == false 最大生成树   否则最小生成树 void spfa(int begin, int paces[maxn], int dis[maxn], vector<Edge> edge[maxn], bool flag){int front = 0, rear = 0;for (int i = 1; i <= n; i++){paces[i] = i;visit[i] = false;dis[i] = flag ? INF : -INF;}dis[begin] = 0;queue[rear++] = begin;visit[begin] = true;while (front != rear){const int now = queue[front++ % maxn];const int size = edge[now].size();visit[now] = false;for (int i = 0; i < size; i++){const int end = edge[now][i].end;const int time = dis[now] + edge[now][i].time;if (flag ? time < dis[end] : time > dis[end]){dis[end] = time;paces[end] = now;if (!visit[end]){visit[end] = true;queue[rear++ % maxn] = end;}}}}}