A*打挂了

P2483 【模板】k 短路 / [SDOI2010] 魔法猪学院

A* 过不了,如果你只是想拿部分分当我没说。
by Yusani_huh @ 2022-10-30 17:19:56


@[Yanusi_huh](/user/239895) 我想试试就逝世
by YuRuochen @ 2022-10-30 17:22:08


@[Yanusi_huh](/user/239895) 或许您可以帮我调调代码。。。
by YuRuochen @ 2022-10-30 17:22:29


@[YuRuochen](/user/658786) 但是我不会 A*(dbq
by Yusani_huh @ 2022-10-30 17:23:02


@[Yanusi_huh](/user/239895) 最新的CODE: ```cpp #include<bits/stdc++.h> using namespace std; int n,m,ans; double e,dis[5010],sum; bool vis[5010]; vector<pair<int,double> > a[5010],b[5010]; queue<int> q; struct node{ int t; double S,F; void init(int a,double b){ t=a; S=b; F=b+dis[a]; } friend bool operator<(const node &x,const node &y){ return x.F<y.F; } }; priority_queue<node> sq; void SPFA(int start){ memset(dis,127,sizeof(dis)); vis[start]=1; dis[start]=0; q.push(start); while(!q.empty()){ int now=q.front(); vis[now]=0; for(int i=0;i<b[now].size();i++){ double s=dis[now]+b[now][i].second; int t=b[now][i].first; if(s<dis[t]){ dis[t]=s; if(!vis[t]){ vis[t]=1; q.push(t); } } } q.pop(); } } int main(){ scanf("%d%d%lf",&n,&m,&e); while(m--){ int u,v; double w; scanf("%d%d%lf",&u,&v,&w); a[u].push_back(make_pair(v,w)); b[v].push_back(make_pair(u,w)); } SPFA(n); node start; start.init(1,0); sq.push(start); while(!sq.empty()){ node now=sq.top(); sq.pop(); int t=now.t; double S=now.S; if(t==n){ sum+=S; if(sum>e) break; ans++; }else{ for(int i=0;i<a[t].size();i++){ int p=a[t][i].first; double g=S+a[t][i].second; if(g+dis[p]>e) continue; node o; o.init(p,g); sq.push(o); } } } printf("%d",ans); return 0; } ```
by YuRuochen @ 2022-10-30 17:23:57


@[Yanusi_huh](/user/239895) 现在100分,MLE了。。。 ```cpp #include<bits/stdc++.h> using namespace std; int n,m,ans; double e,dis[5010],sum; bool vis[5010]; vector<pair<int,double> > a[5010],b[5010]; queue<int> q; struct node{ int t; double S,F; void init(int a,double b){ t=a; S=b; F=b+dis[a]; } friend bool operator<(node x,node y){ return x.F>y.F; } }; priority_queue<node> sq; void SPFA(int start){ memset(dis,127,sizeof(dis)); vis[start]=1; dis[start]=0; q.push(start); while(!q.empty()){ int now=q.front(); vis[now]=0; for(int i=0;i<b[now].size();i++){ double s=dis[now]+b[now][i].second; int t=b[now][i].first; if(s<dis[t]){ dis[t]=s; if(!vis[t]){ vis[t]=1; q.push(t); } } } q.pop(); } } int main(){ scanf("%d%d%lf",&n,&m,&e); while(m--){ int u,v; double w; scanf("%d%d%lf",&u,&v,&w); a[u].push_back(make_pair(v,w)); b[v].push_back(make_pair(u,w)); } SPFA(n); node start; start.init(1,0); sq.push(start); while(!sq.empty()){ node now=sq.top(); sq.pop(); int t=now.t; double S=now.S; if(t==n){ sum+=S; if(sum>e) break; ans++; }else{ for(int i=0;i<a[t].size();i++){ int p=a[t][i].first; double g=S+a[t][i].second; if(g+dis[p]>e) continue; node o; o.init(p,g); sq.push(o); } } } printf("%d",ans); return 0; } ```
by YuRuochen @ 2022-10-30 17:27:59


@[YuRuochen](/user/658786) MLE 了就是被卡了,其他的我不知道因为我真的不会 A*,别 at 我了(
by Yusani_huh @ 2022-10-30 17:31:07


@[YuRuochen](/user/658786) 这道题卡A*,为什么不用可持久化可并堆和Dj呢
by _zexal_ @ 2023-03-11 13:32:25


@[zhong114514](/user/754856) 因为我不会
by YuRuochen @ 2023-03-12 08:30:45


@[YuRuochen](/user/658786) 您可以学。
by 北射天狼 @ 2023-04-04 22:23:48


| 下一页