日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ1741 Tree(树分治——点分治)题解

發(fā)布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ1741 Tree(树分治——点分治)题解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:給一棵樹,問你最多能找到幾個組合(u,v),使得兩點(diǎn)距離不超過k。

思路:點(diǎn)分治,復(fù)雜度O(nlogn*logn)。看了半天還是有點(diǎn)模糊。

顯然,所有滿足要求的組合,連接這兩個點(diǎn),他們必然經(jīng)過他們的最小公共子樹。

?

參考:【poj1741】Tree 樹的點(diǎn)分治

代碼:

#include<set> #include<map> #include<stack> #include<cmath> #include<queue> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> typedef long long ll; const int maxn = 10000 + 10; const int seed = 131; const ll MOD = 1e9 + 7; const int INF = 0x3f3f3f3f; using namespace std; struct Edge{int v, w, next; }edge[maxn << 1]; int dis[maxn], sz[maxn], maxv[maxn]; //到root距離,子樹大小(包括自己),最大孩子 int tot, num, ans, n, k, Max, root, head[maxn];//root重心 bool vis[maxn]; void addEdge(int u, int v, int w){edge[tot].v = v;edge[tot].w = w;edge[tot].next = head[u];head[u] = tot++; }//子樹大小 void dfs_sz(int u, int pre){sz[u] = 1;maxv[u] = 0;for(int i = head[u]; i != -1; i = edge[i].next){int v = edge[i].v;if(v == pre || vis[v]) continue;dfs_sz(v, u);sz[u] += sz[v];if(maxv[u] < sz[v])maxv[u] = sz[v];} }//找以u為根的子樹的重心 void dfs_root(int r, int u, int pre){maxv[u] = max(maxv[u], sz[r] - sz[u]);//sz[r]-sz[u]是u上面部分的樹的尺寸,跟u的最大孩子比,找到最大孩子的最小差值節(jié)點(diǎn)if(maxv[u] < Max){Max = maxv[u];root = u;}for(int i = head[u]; i != -1; i = edge[i].next){int v = edge[i].v;if(v == pre || vis[v]) continue;dfs_root(r, v, u);} }//離重心距離 void dfs_dis(int u, int d, int pre){dis[num++] = d;for(int i = head[u]; i != -1; i = edge[i].next){int v = edge[i].v;if(v == pre || vis[v]) continue;dfs_dis(v, d + edge[i].w, u);} }//經(jīng)過u的滿足條件的組合的數(shù)量 int cal(int u, int d){int ret = 0;num = 0;dfs_dis(u, d, -1);sort(dis, dis + num);int i = 0, j = num - 1;while(i < j){while(dis[i] + dis[j] > k && i < j)j--;ret += j - i;//i到i+1~j滿足i++;}return ret; }void dfs(int u){Max = n;dfs_sz(u, -1);dfs_root(u, u, -1);ans += cal(root, 0);vis[root] = true;for(int i = head[root]; i != -1; i = edge[i].next){int v = edge[i].v;if(!vis[v]){ans -= cal(v, edge[i].w);dfs(v);}} }void init(){tot = ans = 0;memset(head, -1, sizeof(head));memset(vis, false, sizeof(vis)); }int main(){while(scanf("%d%d", &n, &k) && n + k){init();int u, v, w;for(int i = 0; i < n - 1; i++){scanf("%d%d%d", &u, &v, &w);addEdge(u, v ,w);addEdge(v, u, w);}dfs(1);printf("%d\n", ans);}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/KirinSB/p/9801474.html

總結(jié)

以上是生活随笔為你收集整理的POJ1741 Tree(树分治——点分治)题解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无码人妻精品一区二区三区99不卡 | 古装做爰无遮挡三级视频 | 韩国av电影在线观看 | 四虎国产成人精品免费一女五男 | 欧美日韩经典 | 91精品国产色综合久久不卡电影 | 国产亚洲精品美女久久久久 | 日本一本在线观看 | 最近国语视频在线观看免费播放 | 国产精品第13页 | 小日子的在线观看免费第8集 | 午夜寻花| 三级精品在线 | 四虎成人在线 | 国产黄色免费大片 | 伦在线| h片在线免费观看 | 色综合天天综合网天天狠天天 | 日韩精品影院 | 牛夜精品久久久久久久99黑人 | 亚洲成人久 | 超碰人人在线 | 日本男女网站 | 男人操女人逼逼视频 | 精品天堂 | 91久久精品无码一区二区 | 精品亚洲永久免费 | 午夜影院操 | 91看片网站 | 人与嘼交av免费 | 一级片一级| 亚洲精品欧美在线 | 饥渴的少妇和男按摩师 | 老妇free性videosxx | 国内精品久久久久久久久 | 国产在线123 | 91丨porny丨| 老司机精品导航 | 涩涩涩涩涩涩涩涩涩涩 | 不卡的一区二区 | 一本色道久久综合精品婷婷 | 日本少妇三级 | 国产又黄又嫩又滑又白 | 久久久精品日韩 | 精品婷婷 | 性xxxx| 国产嫩草在线观看 | 午夜视频污 | 国产一国产二 | 久久久精品日本 | 日本欧美在线观看 | 久久久久久国产 | 日日碰狠狠躁久久躁蜜桃 | 国产精品无码久久久久一区二区 | 少妇久久久久久被弄到高潮 | 欧美自拍偷拍一区 | 少妇粉嫩小泬喷水视频www | 日韩性猛交ⅹxxx乱大交 | 人妻洗澡被强公日日澡 | 日本黄色录象 | 无遮挡国产 | 日本泡妞xxxx免费视频软件 | 久艹伊人 | 麻豆精品91 | 日韩精品久久久 | 欧美做爰猛烈床戏大尺度 | 亚洲性色视频 | 国产激情小视频 | 三级影片在线播放 | 男裸体无遮挡网站 | 蜜桃aaa | 国产日韩欧美综合 | 国产区视频在线观看 | 看片国产 | 中文字幕日韩精品在线 | 日日操夜夜操天天操 | 91中文国产| 亚洲欧美日韩另类 | a级在线观看 | 精品国产成人亚洲午夜福利 | 国产内谢| 人人色视频 | 国产偷拍一区二区 | 奇米影视在线播放 | 黄页网站在线 | 不卡中文字幕在线 | 免费吃奶摸下激烈视频 | 成年人视频在线看 | 国产高清一区二区 | av在线黄 | 日本一区二区三区免费电影 | 97一区二区三区 | a级黄色在线观看 | 午夜在线精品 | 在线无码va中文字幕无码 | 中文字幕在线官网 | 国产稀缺真实呦乱在线 | 欧美激情在线看 | 91免费观看视频在线 |