que.pop();
for(int i=0;i
if(!vis[i]&&path[u][i]<=d)
{
dist[i]=min(dist[i],dist[u]+path[u][i]);
if(ok[i])
{
que.push(i);
vis[i]=true;
}
}
}
}
for(int i=0;i
//虽然本身是个加油站,但是从1出发根本到不了
if(ok[i]&&!vis[i]) return false;
//不是一个加油站,不能保证从一个有加油站的地方来回
if(!ok[i]&&dist[i]*2>d) return false;
}
return true;
}
void slove()
{
for(int i=0;i
for(int i=n-1;i>0;i--)
{
ok[i]=0;
if(!bfs()) ok[i]=1;
}
int j=n-1;
while(!ok[j]) j--;
for(int i=j;i>=0;i--) printf("%d",ok[i]);
puts("");
}
int main()
{
while(scanf("%d%d",&n,&d)!=EOF)
{
for(int i=0;i
for(int j=0;j
path[i][j]=ceil(dist(i,j));
}
}
slove();
}
return 0;
}