poj 1741 樹的分治

2022-08-05 18:24:12 字數 809 閱讀 2010

看了網上各種大神的樹的分治的模板,然後自己敲了乙個。。。直接上**了,晚上再寫乙個學習筆記, 喪心病狂的poj,上次一直跪在vector上,這次覺得不用vector寫了。。。

#include #include #include #include #include #include #include #define ll long long

#define inf 1<<30

using namespace std;

const int n = 10000+5;

int cnt,s_max,rt,ans,n,k,num,list[n];///list表裝的是整棵子樹的節點

int size,ss[n];///size表示的是分出來的樹的總結點數,ss表示該每顆子樹的最大節點數

int son[n],d[n],head[n<<2]; ///儲存節點子樹的最大節點值

bool vis[n];///vis表示刪除的節點

struct edgee[n<<2];

void add_edge(int u,int v,int w)

///找重心

void dfs_0(int u,int fa)

ss[u] = tem;

}void getroot(int u,int fa)

return ret;

}void solve(int u)

}}void init()

int main()

solve(1);

printf("%d\n",ans);

}return 0;

}

POJ 1741 樹的分治

題意就是求樹上距離小於等於k的點對有多少個 n2的演算法肯定不行,因為1w個點 這就需要分治。可以看09年漆子超的 本題用到的是關於點的分治。乙個重要的問題是,為了防止退化,所以每次都要找到樹的重心然後分治下去,所謂重心,就是刪掉此結點後,剩下的結點最多的樹結點個數最小。每次分治,我們首先算出重心,...

POJ 1741 樹的分治

tree 求樹上兩點最短距離不超過 k 的對數。通過樹的分治的方法,從根節點自上而下開始求其不同子樹上的兩點通過該點的最短距離小於 k 的對數。有兩點需要注意 1.求某節點不同子樹滿足條件的兩點不好直接求。可以通過先求該節點的所有子節點滿足條件的個數,然後減去其子樹內所有滿足條件的點的個數。這個通過...

POJ 1741 樹分治入門

include include include include using namespace std const int inf 0x3f3f3f3f const int max 1e4 5 點分治 cursize 樹當前大小 curroot 當前樹的根 son i 節點i的子節點的個數 d i ...