- dijkstra
int mm[1005][1005];
LL dis[1005];
bool vis[1005];
void dijkstra(int s,int n)
{
memset(vis,0,sizeof vis);
for(int i=0;i<=n;++i)
dis[i]=mm[i];
dis[s]=0;
vis[s]=true;
for(int i=1;i<=n;++i)
{
int mark=-1,mindis=INF;
for(int j=1;j<=n;++j)
{
if(!vis[j]&&mindis>dis[j])
{
mark=j;
mindis=dis[j];
}
}
if(mark==-1)
break;
vis[mark]=true;
for(int j=1;j<=n;++j)
if(!vis[j])
dis[j]=dis[j]>dis[mark]+mm[mark][j]?dis[mark]+mm[mark][j]:dis[j];
}
}
题目:hdu畅通工程续
2.