两次bfs求出最长链d,那么解就有2种情况,如果k<=d+1,那直接输出k-1,也就是在链上走,如果大于d+1,同样也要走这条链,只不过中间要走一些分支来补充。
而走一个分支点消耗的距离是1*2(来回)。1Y
#include#include #include #include #include #include using namespace std; #define N 100005 int n,m; vector map[N]; bool vis[N]; int d; struct node { int pos; int dis; }start,end; node bfs(node k) { memset(vis,0,sizeof(bool)*(n+5)); queue Q; Q.push(k); vis[k.pos]=1; node point,tmp; while(!Q.empty()) { point=Q.front(); Q.pop(); for(int i=0;i