int path[100005];
int used[100005];
int d[100005];
vector<int> G[100005];
int s,n;
void dijstra()
{
for(int i=0;i<n;i++)
{
path[i]=-1;
used[i]=0;
d[i]=100000000;
}
d[s]=0;
while(1)
{
int v=-1;
for(int u=0;u<n;u++)
{
if(used[u]==0 && ((v==-1)||d[u]<d[v]))
{
v=u;
}
}
if(v==-1) break;
used[v]=1;
for(int i=0;i<G[v].size();i++)
{
int u=G[v][i];
if(d[v]+1<d[u])
{
d[u]=d[v]+1;
path[u]=v;
}
}
}
}
const int MAXN=1010;
#define typec int
const typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大
bool vis[MAXN];
int pre[MAXN];
void Dijkstra(typec cost[][MAXN],typec lowcost[],int n,int beg)
{
for(int i=0; i<n; i++)
{
lowcost[i]=INF;
vis[i]=false;
pre[i]=-1;
}
lowcost[beg]=0;
for(int j=0; j<n; j++)
{
int k=-1;
int Min=INF;
for(int i=0; i<n; i++)
if(!vis[i]&&lowcost[i]<Min)
{
Min=lowcost[i];
k=i;
}
if(k==-1)break;
vis[k]=true;
for(int i=0; i<n; i++)
if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i])
{
lowcost[i]=lowcost[k]+cost[k][i];
pre[i]=k;
}
}
}