POJ1741 點分治模板

2021-09-25 04:55:20 字數 1176 閱讀 9774

傳送門:

求樹上兩點間路徑長度小於k的點對個數

參考資料

守望的澱粉質略解:

粉紅兔大佬的澱粉質:

演算法步驟

計算重心位置

計算答案

分治子問題繼續求解(1~3)

#include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

typedef pairpii;

typedef unsigned long long ull;

#define ls rt<<1

#define rs rt<<1|1

#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

#define bug printf("*********\n")

#define fin freopen("input.txt","r",stdin);

#define fon freopen("output.txt","w+",stdout);

#define io ios::sync_with_stdio(false),cin.tie(0)

#define debug1(x) cout<<"["<<#x<<" "<<(x)<<"]\n"

#define debug2(x,y) cout<<"["<<#x<<" "<<(x)<<" "<<#y<<" "<<(y)<<"]\n"

#define debug3(x,y,z) cout<<"["<<#x<<" "<<(x)<<" "<<#y<<" "<<(y)<<" "<<#z<<" "}void dfs(int u, int d, int f)

}}int calc(int u, int d)

return sum;

}void dfs(int u)

}}int main()

wt[0] = inf;

tsiz = n;

getroot(1, 0);

dfs(root);

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

}return 0;

}

POJ1741 點分治模板

傳送門 求樹上兩點間路徑長度小於k的點對個數 參考資料 守望的澱粉質略解 粉紅兔大佬的澱粉質 演算法步驟 計算重心位置 計算答案 分治子問題繼續求解 1 3 include include include include include include include include include...

POJ 1741 點分治詳解

題意 給出乙個n 1e4 個點的樹,每條邊有權,求樹上長度小於等於k的路徑條數。u,v 和 v,u 算兩條。點分治 顧名思義,點分治就是對點進行分治,一般用於路經統計問題。對每個點而言,一條路徑要麼經過他,要麼不經過他,這就是分,即分成路徑經過此點和不經過此點。基本思想是 當經過某點的路徑可以比較方...

POJ 1741 點分治入門

tree 其實關於時間複雜度我也似懂非懂,大概就是把一顆樹分層,然後每一層的操作大概是 n log n 然後我們每次找樹的重心,就可以分logn層,所以總時間複雜度大概是就是n log n 關於路徑,我們先算出到根的距離,然後分成兩種,一種關於經過n節點,這是合法的,一種是不經過根節點,就是在一根子...