int maps[105][105];
int n,m;
//初始化
void init()
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(i==j)
maps[i][j]=0;
else
maps[i][j]=INF;
}
}
}
void floyd()
{
for(int k=1;k<=n;++k)
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]);
}
}
}
int spfa(int st,int ed)
{
for(int i=1;i<=n;++i)
{
dis[i]=INF;
vis[i]=0;
}
dis[st]=0;
queue<int>q;
q.push(st);
vis[st]++;
while(!q.empty())
{
int now=q.front();
q.pop();
vis[now]--;
for(int i=1;i<=n;++i)
{
if(dis[i]>dis[now]+maps[now][i])
{
dis[i]=dis[now]+maps[now][i];
if(!vis[i])
{
q.push(i);
vis[i]++;
}
}
}
}
return dis[ed];
}
int maps[1005][1005];
int n,m;
int dis[1005];
int vis[1005];
void init()
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(i==j)
maps[i][j]=0;
else
maps[i][j]=INF;
}
}
}
int dijkstra(int st,int ed)
{
for(int i=1;i<=n;++i)
{
dis[i]=maps[st][i];
vis[i]=0;
}
vis[st]++;
while(1)
{
int next=-1;
for(int i=1;i<=n;++i)
{
if(!vis[i]&&(next==-1||dis[next]>dis[i]))
next=i;
}
if(next==-1)
break;
vis[next]++;
for(int i=1;i<=n;++i)
dis[i]=min(dis[i],dis[next]+maps[next][i]);
}
return dis[ed];
}
int maps[105][105];
int n,m;
//初始化
void init()
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(i==j)
maps[i][j]=0;
else
maps[i][j]=INF;
}
}
}
void floyd()
{
for(int k=1;k<=n;++k)
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]);
}
}
}
int spfa(int st,int ed)
{
for(int i=1;i<=n;++i)
{
dis[i]=INF;
vis[i]=0;
}
dis[st]=0;
queue<int>q;
q.push(st);
vis[st]++;
while(!q.empty())
{
int now=q.front();
q.pop();
vis[now]--;
for(int i=1;i<=n;++i)
{
if(dis[i]>dis[now]+maps[now][i])
{
dis[i]=dis[now]+maps[now][i];
if(!vis[i])
{
q.push(i);
vis[i]++;
}
}
}
}
return dis[ed];
}
int maps[1005][1005];
int n,m;
int dis[1005];
int vis[1005];
void init()
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(i==j)
maps[i][j]=0;
else
maps[i][j]=INF;
}
}
}
int dijkstra(int st,int ed)
{
for(int i=1;i<=n;++i)
{
dis[i]=maps[st][i];
vis[i]=0;
}
vis[st]++;
while(1)
{
int next=-1;
for(int i=1;i<=n;++i)
{
if(!vis[i]&&(next==-1||dis[next]>dis[i]))
next=i;
}
if(next==-1)
break;
vis[next]++;
for(int i=1;i<=n;++i)
dis[i]=min(dis[i],dis[next]+maps[next][i]);
}
return dis[ed];
}