void dijkstra(int s){
memset(d,0x3f,sizeof(d));
memset(v,0,sizeof(v));d[s]=0;
q.push(make_pair(0,s));
while(q.size()){
int x=q.top().second; q.pop();
if(v[x]) continue; v[x]=1;
for(int i=lin[x];i;i=e[i].n){
int u=e[i].y;
if(!v[u]&&d[u]>d[x]+e[i].v){
d[u]=d[x]+e[i].v;
q.push(make_pair(-d[u],u));
}
}
}
}
void SPFA(int s)
{
int head=0,tail=0;
q[++tail]=s;d[s]=0;v[s]=1;
while(head<tail){
int x=q[++head];v[x]=0;
for(int i=lin[x];i;i=e[i].n){
int u=e[i].y;
if(d[u]>d[x]+e[i].v){
d[u]=d[x]+e[i].v;
if(v[u]==0){
q[++tail]=u;
v[u]=1;
}
}
}
}
}