題目大意:給你n個點,n-1條邊,將圖連成一棵生成樹,問你從任意點為起點,走k(k<=n)個點,至少需要走多少距離(每條邊的距離是1);
思路:樹形dp求樹的直徑r;
a:若k<=r+1 ,ans = k-1;
b:若k>=r+1,ans = r+(k-(r+1))*2;
#include#include#includeusing namespace std;
#define inf 999999999
#define n 110000
struct node bian[n*2];
int dis[n],head[n],yong;
void addedge(int u,int v)
int visit[n],n,m;
int spfa(int u)
}int ma=1;
for(i=1;i<=n;i++)
if(dis[ma]
HDU4607 樹的直徑
樹的直徑的求法,任取一點u為起點,bfs出一條最長路徑,假設此時終點為v,則再次以v為起點,再bfs出一條最長路徑v w。可以得出樹的直徑即為所求。證明略。可以直接bfs或者dfs都行,來發水題 author crazy 石頭 data structure 樹的直徑 created time 201...
樹的直徑 hdu 4607
樹的直徑定義 樹中所有最短路徑的最大值。定義distance a,b 為頂點a與b之間的最短距離。用數學語言表示就是 對於一棵樹 t v,e 彐vx,vy v,v1,v2 v,都有distance v1,v2 distance vx,vy 則把vx到vy的最短路徑稱為樹t的直徑。現在我們來用演算法求...
HDU4607 最大直徑 樹DP
題意是給一棵樹,從乙個點出發走k個點,問最少走幾次邊。通過一次樹dp求出最大直徑,如果最大直徑能包含k個點就走最大直徑,否則每增加乙個點就需要多走一條邊兩次,那麼答案就不難想了。include using namespace std define maxn 511111 define maxm 11...