跳至内容
CVBB ACM Team
用户工具
注册
登录
站点工具
搜索
工具
显示页面
修订记录
Copy this page
导出 PDF
反向链接
最近更改
媒体管理器
网站地图
注册
登录
>
最近更改
媒体管理器
网站地图
您在这里:
front_page
»
2020-2021
»
teams
»
legal_string
»
lgwza
»
spfa_dijkstra_最短路模板
2020-2021:teams:legal_string:lgwza:spfa_dijkstra_最短路模板
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== SPFA+Dijkstra 最短路模板 ====== ===== 参考代码 ===== <code cpp> #include<bits/stdc++.h> using namespace std; const int N=1e5+5,M=1e6+5,INF=2147483647; int head[N],to[M],nxt[M],dis[N],cost[M]; bool vis[N]; int tot=1; int n; void add(int u,int v,int c){ nxt[++tot]=head[u]; head[u]=tot; to[tot]=v; cost[tot]=c; } void dijkstra(int s){ for(int i=1;i<=n;i++) dis[i]=INF; dis[s]=0; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq; pq.push(make_pair(0,s)); while(!pq.empty()){ int u=pq.top().second; pq.pop(); if(vis[u]) continue; vis[u]=1; for(int i=head[u];i;i=nxt[i]){ int v=to[i]; if(!vis[v]&&dis[u]+cost[i]<dis[v]){ dis[v]=dis[u]+cost[i]; pq.push(make_pair(dis[v],v)); } } } } void spfa(int s){ for(int i=1;i<=n;i++) dis[i]=INF; queue<int>que; vis[s]=1; dis[s]=0; que.push(s); while(!que.empty()){ int u=que.front(); que.pop(); vis[u]=0; 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(!vis[v]){ vis[v]=1; que.push(v); } } } } } int main(){ int m,s; scanf("%d %d %d",&n,&m,&s); while(m--){ int u,v,w; scanf("%d %d %d",&u,&v,&w); add(u,v,w); } dijkstra(s); // spfa(s); for(int i=1;i<=n;i++) printf("%d ",dis[i]); return 0; } </code>
2020-2021/teams/legal_string/lgwza/spfa_dijkstra_最短路模板.txt
· 最后更改: 2020/08/21 08:53 由
lgwza
页面工具
显示页面
修订记录
反向链接
Copy this page
导出 PDF
回到顶部