1 #include <bits/stdc++.h> 2 #define fi first 3 #define se second 4 #define pb push_back 5 #define fio ios::sync_with_stdio(false);cin.tie(0); 6 #define pii pair<int,int> 7 #define vi vector<int> 8 #define vc vector<char> 9 #define mii map<int,int> 10 #define si(a) scanf("%d",&a) 11 #define ss(a) scanf("%s",&a) 12 #define sl(a) scanf("%I64d",&a); 13 #define slf(a) scanf("%lf",&a); 14 #define CLEAR(a,b) memset(a,b,sizeof(a)) 15 #define pi acos(-1) 16 typedef long long ll; 17 typedef unsigned long long ull; 18 typedef double db; 19 const int INF=0x3f3f3f3f; 20 const int N=2e5+5; 21 using namespace std; 22 23 priority_queue< int,vector<int>,greater<int> > pqg; 24 priority_queue< int,vector<int>,less<int> > pql; 25 26 27 struct edge 28 { 29 int to,cost; 30 }; 31 //first是最短距离,second是顶点的编号 32 int v;//顶点个数 33 vector<edge> G[N]; 34 int dis[N]; 35 priority_queue<pii,vector<pii>,greater<pii> > que; 36 37 void dijkstra(int start) 38 { 39 memset(dis,INF,sizeof dis); 40 dis[start] = 0; 41 que.push(make_pair(0,start)); //把起点推入队列 42 while(!que.empty()) 43 { 44 pii p = que.top(); que.pop(); 45 int v = p.second; //顶点的编号 46 if (dis[v] < p.first) continue; 47 for(int i = 0; i < G[v].size(); i++) 48 { 49 edge e = G[v][i]; 50 if (dis[e.to] > dis[v] + e.cost) 51 { 52 dis[e.to] = dis[v] + e.cost; 53 que.push(make_pair(dis[e.to],e.to)); 54 } 55 } 56 } 57 } 58 59 int main() 60 { 61 62 }