题目大意:
最短路模板;
基本思路:
贪心
代码如下:
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]));
}
}
}
}