點分治見bzoj2152
此題只是同時需要把點到根的距離存到陣列裡, 可以用sort排序然後再統計(arr陣列排序後只要arr[l]+arr[r]小於k,則arr[l]與arr中下標[l+1, r]任意乙個的和都滿足要求,直接統計)
#include#include#include#includeusing namespace std;const int maxn = 100007, inf = ~0u >> 1;
int n, k, c, csiz, tot, size[maxn], dis[maxn], arr[maxn];
int cnt, head[maxn], next[maxn << 1], to[maxn << 1], len[maxn << 1];
void addedge(int u, int v, int l)
bool vis[maxn];
void dfs(int u, int last)
mxsz = max(mxsz, tot - size[u]);
if(csiz > mxsz) csiz = mxsz, c = u;
}void dist(int u, int last)
}int calc(int u, int l)
return ret;
}int ret;
void get_ans(int u)
}int main()
scanf("%d", &k);
get_ans(1);
printf("%d\n", ret);
return 0;
}
bzoj 1468 Tree 點分治模板
time limit 10 sec memory limit 64 mb submit 1527 solved 818 submit status discuss 給你一棵tree,以及這棵樹上邊的距離.問有多少對點它們兩者間的距離小於等於k n n 40000 接下來n 1行邊描述管道,按照題目中...
1468 Tree 樹的點分治
樓教主男人八題之一 好可怕 似乎不是很難的樣子。點分治大致是這樣 先選出乙個根 一般是重心 然後可以把兩個點之間的路徑分為經過根的和不經過根的,經過根的直接處理記錄,不經過根的遞迴處理計算。似乎還用到了容斥原理的方法。記錄經過當前根的方案數的方法是 先以當前的根為起點遍歷一遍記下di s 陣列即到根...
Tree(樹分治 點分治)
原題 poj 1741 題意 有一棵n個節點的樹,每條邊都有乙個權值,問有多少個節點之間的距離小於等於k,解析 典型的樹分治,對於每一棵樹,我們首先找到它的重心 重心 一棵樹中以這個點為root時的最大子樹的節點數最小 int siz n maxn n 這棵子樹大小,最大子樹大小 void getg...