題目:park visit
題意:乙個人去公園,想走k個景點,問最短的距離。
思路:求出樹的直徑(最長的鏈、最長路徑)。從任意點a,找到離a最遠點b。再找到離b最遠點c,bc就是最長路徑。如果k**:
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define for(i,a) for(i=0;i=b;i--)
#define clr(ar,vel) memset(ar,vel,sizeof(ar))
#define pb push_back
#define maxint 0x7fffffff
const int maxn = 100010;
int t, n, m, k;
int m, n, maxd;
int from, to;
vector g[maxn];
bool vis[maxn];
inline void add_edge(int from, int to)
int dfs(int x, int d)
for(int i = 0; i < g[x].size(); i ++)
vis[x] = 0;
return res;
}int solve()
int main()
// system("pause");
solve();
maxd ++;
// cout << "maxlen " << maxlen << endl;
for(int i = 0; i < m; i ++)
} return 0;
}
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的直徑。現在我們來用演算法求...
hdu 4607 求樹的直徑
分析後就是求樹的直徑兩次bfs即可 證明 樹的直徑是指樹的最長簡單路。求法 兩遍bfs 先任選乙個起點bfs找到最長路的終點,再從終點進行bfs,則第二次bfs找到的最長路即為樹的直徑 原理 設起點為u,第一次bfs找到的終點v一定是樹的直徑的乙個端點 證明 1 如果u 是直徑上的點,則v顯然是直徑...