Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 523 Accepted Submission(s): 236 Problem Description Claire and her little friend, ykwd, are travelling in Shevchenko's Park! The par…
两次DFS求树直径方法见 这里. 这里的直径是指最长链包含的节点个数,而上一题是指最长链的路径权值之和,注意区分. K <= R: ans = K − 1; K > R: ans = R − 1 + ( K − R ) ∗ 2; #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; ; struct n…
Problem Description Claire and her little friend, ykwd, are travelling in Shevchenko's Park! The park is beautiful - but large, indeed. N feature spots in the park are connected by exactly (N-1) undirected paths, and Claire is too tired to visit all…
[题目]题意:N个城市形成一棵树,相邻城市之间的距离是1,问访问K个城市的最短路程是多少,共有M次询问(1 <= N, M <= 100000, 1 <= K <= N). [思路] 访问K个城市的路线: 可以发现它由一条主线和若干支线构成,并且主线上的边只用访问一次,而支线上的边必须且只用访问两次.而题目给定的是一棵树,那么访问K的城市就必须且仅需要走K-1条边.总边数是固定的,我们只需要保证主线最长即可,所以就是在树中找最长链. [找最长链]树形dp,dp[i]表示他的子树的最…
求树上最长链:两遍搜索. 第一次从树上任意点开始,最远点必然是某一条最长链上的端点u. 第二次从u开始,最远点即该最长链的另一端点. 先在最长链上走,不足再去走支链. 把询问数m错打成n,狠狠wa了一次= = #include<stdio.h> #include<string.h> ; struct E{ int v,next; }e[MAXN<<]; struct Q{ int p,c; }q[MAXN]; int tol; int head[MAXN]; int v…