本文主要是介绍ccf 交通规划(迪杰斯特拉优先队列模板),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么跟什么就是刘汝佳小白书迪杰斯特拉队列的优先队列法
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
typedef pair<int,int> pii;
vector<pair<int,int> >g[10010];
bool vis[10010];
int cost[10010];
int dist[10010];
int n,m;
priority_queue<pii,vector<pii>,greater<pii> > q;
void dij()
{for(int i=1;i<=n;i++)dist[i]=INF;dist[1]=0;cost[1]=0;q.push(make_pair(dist[1],1));while(!q.empty()){pii t=q.top();q.pop();int v=t.second;if(vis[v]) continue;vis[v]=1;for(int i=0;i<g[v].size();i++){int u=g[v][i].first;int c=g[v][i].second;if(dist[v]+c<dist[u]){dist[u]=dist[v]+c;cost[u]=c;q.push(make_pair(dist[u],u));}if(dist[v]+c==dist[u]){cost[u]=min(cost[u],c);}}}}
int main()
{int u,v,w;cin>>n>>m;for(int i=0;i<m;i++){cin>>u>>v>>w;g[u].push_back(make_pair(v,w));g[v].push_back(make_pair(u,w));}dij();long long ans=0;for(int i=1;i<=n;i++)ans+=cost[i];cout<<ans<<endl;
}
这篇关于ccf 交通规划(迪杰斯特拉优先队列模板)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!