高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > 【模板】链式前向星+spfa

【模板】链式前向星+spfa

时间:2020-04-06 18:18:49

相关推荐

【模板】链式前向星+spfa

洛谷传送门——分糖果

博客——链式前向星

团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路。

可做模板。

#include <cstdio>#include <queue>#include <cstring>#include <algorithm>using namespace std;int n, p, c, ans, cnt;long long m;struct node{int to, next;}edge[5000001];int dis[5000001], head[500001], x, y;bool vis[5000001];void spfa(){int i, j;queue <int> q;memset(dis, 0x7f, sizeof(dis));dis[c] = 1;vis[c] = 1;q.push(c);while(!q.empty()){i = q.front();q.pop();vis[i] = 0;for(j = head[i]; j >= 0; j = edge[j].next)if(dis[edge[j].to] > dis[i] + 1){dis[edge[j].to] = dis[i] + 1;if(!vis[edge[j].to]){q.push(edge[j].to);vis[edge[j].to] = 1;}}}}int main(){int i, j;scanf("%d %d %d", &n, &p, &c);scanf("%d", &m);memset(head, -1, sizeof(head));for(i = 1; i <= p; i++){scanf("%d %d", &x, &y);edge[cnt].to = y;edge[cnt].next = head[x];head[x] = cnt++;edge[cnt].to = x;edge[cnt].next = head[y];head[y] = cnt++;}spfa();for(i = 1; i <= n; i++) ans = max(ans, dis[i]);printf("%lld", ans + m);return 0;}复制代码

View Code

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。