最短路模板(迪杰斯特拉)
最短路
priority_queue<pair < int,int> >que; //frist的相反数代替边的长度,second是下标
void add(int x,int y,int z) //邻接矩阵,x是这条边的起点,y是终点,z是长度 { ver[++tot]=y,edge[tot]=z; next[tot]=head[x],head[x]=tot; }
void dijkstra(int origin) //求origin到各个点的最短长度 { memset(d,9999999,sizeof(d)); memset(vis,0,sizeof(vis)); d[origin]=0; que.push(make_pair(0,origin)); while(que.size()) { int x=que.top().second; que.pop(); if(vis[x]==1) continue; vis[x]=1; for(int i=head[x];i;i=next[i]) { int y=ver[i]; int z=edge[i]; if(d[y]>d[x]+z) { d[y]=d[x]+z; que.push(make_pair(-d[y],y)); } } } }