struct node{
int d, num;
bool operator < (node i)const{
return d > i.d;
}
}t;
priority_queue <node> q;
void Dijkstra(){
memset(d, 0x7f, sizeof d);
d[s] = 0;
t.num = s, t.d = 0;
q.push(t);
while(q.size()){
t = q.top(); q.pop();
int u = t.num;
if(vis[u]) continue;
vis[u] = 1;
for(int j = 0; j < G[u].size(); j++){
int e = G[u][j], v = E[e].v, w = E[e].w;
if(d[v] > d[u]+w) {
d[v] = d[u] + w;
t.num = v, t.d = d[v];
q.push(t);
}
}
}
}