2 solutions
-
1
先看一下题目。
题目大致意思就是给你一个图,起点 ,问你 到各个点的最短路,即权值最小。
于是想到了 算法。
什么是 ?
算法基于广搜算法实现,主要是对边进行处理,其思想是每次处理最小的边,如果总权值比存的最短路小,则更新,并加入队列。
注意:此图是个有向图!
加了堆优化,时间复杂度 。
代码:
#include<bits/stdc++.h> using namespace std; int n,m,s,dis[10005]; struct joker{ int v,val; }; vector<joker> a[10005]; struct node{ int u,step; }; priority_queue<node,vector<node> > q; bool operator<(node a,node b){ return a.step>b.step; } void dijstra(){ q.push({s,0}); while(!q.empty()){ node t=q.top(); q.pop(); int np=t.u; for(int i=0;i<a[np].size();i++){ int v=a[np][i].v; if(dis[v]>dis[np]+a[np][i].val){ dis[v]=dis[np]+a[np][i].val; q.push({v,dis[v]}); } } } } int main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>m>>s; while(m--){ int u,v,w; cin>>u>>v>>w; a[u].push_back({v,w}); } memset(dis,0x3f,sizeof(dis)); dis[s]=0; dijstra(); for(int i=1;i<=n;i++){ if(dis[i]==0x3f3f3f3f) cout<<INT_MAX<<' '; else cout<<dis[i]<<' '; } return 0; } -
-1
SPFA
#include<bits/stdc++.h> using namespace std; void read(int &h){ char o; int x=0,y=1; o=getchar_unlocked(); while(!(o<='9'&&o>='0')){ if(o=='-'){ y=-1; } o=getchar_unlocked(); } while(o<='9'&&o>='0'){ x*=10; x+=o-'0'; o=getchar_unlocked(); } h=x*y; return ; } const int N=5e5+10; int n,m,s,u,v,w; vector<int> g[N],dis[N]; queue<int> q; bool vis[N]; int len[N]; void start(){ for(int i=1;i<=n;i++){ len[i]=INT_MAX; } len[s]=0; vis[s]=1; q.push(s); return ; } int main(){ ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr); read(n);read(m);read(s); start(); for(int i=1;i<=m;i++){ read(u);read(v);read(w); g[u].push_back(v); dis[u].push_back(w); } while(!q.empty()){ int x=q.front(); q.pop(); vis[x]=0; for(int i=0;i<g[x].size();i++){ int now=g[x][i]; if(len[now]>len[x]+dis[x][i]){ if(!vis[now]){ q.push(now); vis[now]=true; } len[g[x][i]]=len[x]+dis[x][i]; } } } for(int i=1;i<=n;i++){ if(len[i]!=INT_MAX){ cout<<len[i]; } else{ cout<<2147483647; } cout<<" "; } return 0; }
- 1
Information
- ID
- 7401
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 5
- Tags
- # Submissions
- 224
- Accepted
- 43
- Uploaded By