dijkstra模板
题目大意:
最短路模板;
基本思路:
贪心
代码如下:
int dis[maxn]; bool vis[maxn]; vector<int>gra[maxn]; struct Node{ int u,w; Node(int u_,int w_){ u=u_;w=w_; } bool operator<(const Node& rhs)const{ return w>rhs.w; } }; struct Edge{ int from,to,dist; Edge(int u,int v,int d):from(u),to(v),dist(d){} }edge[maxn]; void dijkstra(int s){ priority_queue<Node>pq;pq.push(Node(s,0)); memset(dis,inf,sizeof(dis));dis[s]=0; memset(vis,false,sizeof(vis)); while(!pq.empty()){ Node tmp=pq.top(); int u=tmp.u; if(vis[u]){ continue; } vis[u]=true; int sz=gra[u].size(); for(int i=0;i<sz;i++){ Edge& e=edge[gra[u][i]]; if(dis[e.to]>dis[u]+e.dist){ dis[e.to]=dis[u]+e.dist; pq.push(Node(e.to,dis[e.to])); } } } }