dijkstra优先队列优化求调

P1828 [USACO3.2] 香甜的黄油 Sweet Butter

@[__Shine__](/user/552610) minn初始值设为1e9
by _Haoomff_ @ 2023-07-14 15:40:19


@[_Haoomff_](/user/368111) 改为1e9后输出1e9
by __Shine__ @ 2023-07-14 15:44:26


@[__Shine__](/user/552610) 在改变minn值之前判断一下 ```cpp if(head[i]) ```
by _Haoomff_ @ 2023-07-14 15:46:39


@[_Haoomff_](/user/368111) 还是不行额awa
by __Shine__ @ 2023-07-14 15:48:26


@[__Shine__](/user/552610) 你自己对着看看吧,我跟你的代码也不一样,我还用了个结构体 ```cpp inline void add(int u,int v,int w){ V[++edgenum]=v; W[edgenum]=w; Next[edgenum]=Head[u]; Head[u]=edgenum; } struct node{ int u,dist; node(){} node(int u,int dist):u(u),dist(dist){} friend bool operator<(const node &a1,const node &a2){ return a1.dist<a2.dist; } friend bool operator>(const node &a1,const node &a2){ return a2<a1; } }; void Dijkstar(int Start){ memset(dist,0x3f,sizeof(dist)); memset(vis,0,sizeof(vis)); dist[Start]=0; priority_queue<node,vector<node>,greater<node> > q; q.push(node(Start,0)); for(;!q.empty();){ int u=q.top().u; q.pop(); if(vis[u])continue; vis[u]=true; for(int e=Head[u];e;e=Next[e]){ int v=V[e],w=W[e]; if(!vis[v]&&dist[u]+w<dist[v]){ dist[v]=dist[u]+w; q.push(node(v,dist[v])); } } } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>k>>n>>m; for(int i=1;i<=k;++i)cin>>cow[i]; for(;m--;){ int u,v,w; cin>>u>>v>>w; add(u,v,w); add(v,u,w); } int ans=1e9; for(int i=1;i<=n;++i){ Dijkstar(i); int sum=0; for(int j=1;j<=k;++j)sum+=dist[cow[j]]; if(Head[i])ans=min(ans,sum); } cout<<ans; return 0; } ```
by _Haoomff_ @ 2023-07-14 15:51:20


666 李浩源gg666
by __Li_Chuan_Pei__ @ 2023-07-31 08:55:34


|