P4206 [NOI2005] 聪聪与可可

预处理 nxt[i,j] 表示i到j最近距离i的下一个位置
最后记忆化搜索就好
#include
#include
#include
#include
using namespace std;
int cur,n,m,s,t;
int head[1005],p[1005];
int dis[1005][1005],nxt[1005][1005];
bool vis[1005],visit[1005][1005];
double f[1005][1005];
struct EDGE{
int t,next;
}e[2005];
#define INF 0x3f3f3f3f
void add(int a,int b)
{
cur++;
e[cur].t=b;
e[cur].next=head[a];
head[a]=cur;
}
queue < int > q;
void SPFA(int *dis,int *nxt,int s)
{
dis[s]=0;
q.push(s);
while (!q.empty())
{
int u=q.front();q.pop();
vis[u]=false;
for (int h=head[u];h!=-1;h=e[h].next)
{
int v=e[h].t;
if (dis[u]+1