| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 
 | #include <iostream>#include <cstdio>
 #include <algorithm>
 #include <cstring>
 #include <vector>
 #include <queue>
 #define pair_int std::pair<int,int>
 using namespace std;
 #define DIJKSTRA_MAX 10010
 
 struct node {
 
 int v,w;
 node() {}
 node(int v0,int w0):v(v0),w(w0) {}
 bool operator< (const node&b)const {
 return w<b.w;
 }
 };
 bool vis[DIJKSTRA_MAX];
 int dis[DIJKSTRA_MAX];
 
 vector<node> son[DIJKSTRA_MAX];
 inline int dijkstra(int s,int t) {
 priority_queue<pair_int,vector<pair_int>,greater<pair_int> > q;
 memset(dis,127,sizeof(dis));
 memset(vis,false,sizeof(vis));
 dis[s]=0;
 q.push(make_pair(dis[s],s));
 while(!q.empty()) {
 int now=q.top().second;
 q.pop();
 if(vis[now]) continue;
 vis[now]=true;
 for(int i=0; i<son[now].size(); i++) {
 node x=son[now][i];
 if(dis[now]+x.w<dis[x.v]) {
 dis[x.v]=dis[now]+x.w;
 q.push(make_pair(dis[x.v],x.v));
 }
 }
 }
 return dis[t];
 }
 inline void insert(int a,int b,int w) {
 son[a].push_back(node(b,w));
 }
 inline void insert_multi(int a,int b,int w) {
 son[a].push_back(node(b,w));
 son[b].push_back(node(a,w));
 }
 
 |