超时Dijstra求助,TLE三个点

P3371 【模板】单源最短路径(弱化版)

@[jimmy2016](/space/show?uid=30725) err,你就用SPFA吧QwQ
by disangan233 @ 2018-07-19 10:05:20


@[jimmy2016](/space/show?uid=30725) 你这个是优先队列优化spfa吧。。。 dijkstra每个点只会进一次队
by 星小雨 @ 2018-07-19 10:11:34


什么意思?我这里进队了多次吗
by 打脸不疼 @ 2018-07-19 11:04:07


```cpp #include <bits/stdc++.h> #define inf 0x7fffffff using namespace std; struct ps { int id; int dist; bool operator > (const ps& n) const{ return dist<n.dist; } bool operator < (const ps& n) const{ return dist>n.dist; } }; struct E { int to; int w; }; priority_queue <ps> points; int n,e,dis[20005],yd; vector <E> GE[20005]; bool used[20005]; int main() { cin>>n>>e>>yd; for(int i=1;i<=n;i++) { if(i!=yd) { dis[i]=inf; } } for(int i=1;i<=e;i++) { int s,o,w; E t; cin>>s>>o>>w; t.to=o; t.w=w; GE[s].push_back(t); } ps Y; Y.id=yd; Y.dist=0; points.push(Y); while(!points.empty()) { ps t=points.top(); points.pop(); int p=t.id; if(!used[p]) { for(int i=0;i<GE[p].size();i++) { E et=GE[p][i]; if(dis[et.to]>dis[p]+et.w&&!used[et.to]) { dis[et.to]=dis[p]+et.w; ps in; in.id=et.to; in.dist=dis[et.to]; points.push(in); } } } used[p]=1; } for(int i=1;i<=n;i++) { cout<<dis[i]<<' '; } return 0; } ```
by Barry_Wang @ 2018-07-19 11:25:51


上一页 |