用树形DP找到这颗树距离最远的两个点....对于一个询问K..若小于最远距离..显然只要走最远的这条边走K-1个边就行了..
当K大于了最远距离..就要去走其他的点...而去其他点必须再回到这个主线..所以要加上(最远距离上点总数-K)*2...
Program:
#include#include #include #include #include #include #include #define ll long long#define oo 1000000007#define MAXN 100010using namespace std;vector Tree[MAXN];int dis[MAXN],M;void dfs(int x,int f){ int i,m=Tree[x].size(); dis[x]=1; for (i=0;i