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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[O(N)的我不会]树网的核

發布時間:2025/7/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [O(N)的我不会]树网的核 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】

設T=(V, E, W) 是一個無圈且連通的無向圖(也稱為無根樹),每條邊帶有正整數的權,我們稱T為樹網(treenetwork),其中V, E分別表示結點與邊的集合,W表示各邊長度的集合,并設T有n個結點。

路徑:樹網中任何兩結點a,b都存在唯一的一條簡單路徑,用d(a,b)表示以a,b為端點的路徑的長度,它是該路徑上各邊長度之和。我們稱d(a,b)為a,b兩結點間的距離。

一點v到一條路徑P的距離為該點與P上的最近的結點的距離:

d(v,P)=min{d(v,u),u為路徑P上的結點}。

樹網的直徑:樹網中最長的路徑稱為樹網的直徑。對于給定的樹網T,直徑不一定是唯一的,但可以證明:各直徑的中點(不一定恰好是某個結點,可能在某條邊的內部)是唯一的,我們稱該點為樹網的中心。

偏心距ECC(F):樹網T中距路徑F最遠的結點到路徑F的距離, 即 ECC(F)=max{d(v,F),v∈V}.

任務:對于給定的樹網T=(V, E,W)和非負整數s,求一個路徑F,它是某直徑上的一段路徑(該路徑兩端均為樹網中的結點),其長度不超過s(可以等于s),使偏心距ECC(F)最小。我們稱這個路徑為樹網T=(V,E,W)的核(Core)。必要時,F可以退化為某個結點。一般來說,在上述定義下,核不一定只有一個,但最小偏心距是唯一的。

下面的圖給出了樹網的一個實例。圖中,A-B與A-C是兩條直徑,長度均為20。點W是樹網的中心,EF邊的長度為5。如果指定s=11,則樹網的核為路徑DEFG(也可以取為路徑DEF),偏心距為8。如果指定s=0(或s=1、s=2),則樹網的核為結點F,偏心距為12。

【輸入格式】

輸入文件包含n行:
第1行,兩個正整數n和s,中間用一個空格隔開。其中n為樹網結點的個數,s為樹網的核的長度的上界。設結點編號依次為1, 2, ..., n。
從第2行到第n行,每行給出3個用空格隔開的正整數,依次表示每一條邊的兩個端點編號和長度。例如,“2 4 7”表示連接結點2與4的邊的長度為7。
所給的數據都是正確的,不必檢驗。

【輸出格式】

輸出文件只有一個非負整數,為指定意義下的最小偏心距。

【樣例輸入】

5 2
1 2 5
2 3 2
2 4 4
2 5 3

【樣例輸出】

5
【分析】

首先找到一個樹的直徑。方法是:從1點出發,找到距離1最遠的點,記為x。然后從x出發,所搜索到的最遠路徑就是樹的直徑。

然后我們用搜索的方法計算每個點到直徑的最短距離dist。

之后在直徑上枚舉路徑的起點和終點。找到最小的偏心距。

#include <stdio.h> #include <string.h> #include <limits.h> #define MAXN 310 struct tnode {int num;tnode *next; } g[MAXN],*t; int q[MAXN * 3],list[MAXN],loc[MAXN],dist[MAXN],from[MAXN],dis[MAXN],di[MAXN][MAXN],xdis[MAXN][MAXN]; int n,l,r,s,x,y,z,tot,ans; bool v[MAXN],in_tree[MAXN]; void insert(int x,tnode &p) {t = new(tnode);t->num = x;t->next = p.next;p.next = t; } void dfs(int father,int x) {tnode *tt;tt = g[x].next;while (tt != NULL) {int y = tt->num;if (!in_tree[y])if (dist[x] + di[x][y] < dist[y]) {dist[y] = dist[x] + di[x][y];from[y] = father;dfs(father,y);}tt = tt->next;} } int main() { scanf("%d%d",&n,&s);for (int i = 1;i < n;++i) {scanf("%d%d%d",&x,&y,&z);insert(x,g[y]);insert(y,g[x]);di[x][y] = z;di[y][x] = z;}q[0] = 1;v[1] = 1;while (l <= r) {x = q[l];t = g[x].next;while (t != NULL) {y = t->num;if (y != from[x])if (dis[y] < di[x][y] + dis[x]) {dis[y] = di[x][y] + dis[x];from[y] = x;if (!v[y]) {q[++r] = y;v[y] = 1;}}t = t->next;}++l;v[x] = 0;}z = 0;for (int i = 1;i <= n;++i)if (dis[i] > z) {z = dis[i];x = i;}memset(from,0,sizeof(from));memset(v,0,sizeof(v));v[x] = 1;memset(dis,0,sizeof(dis));q[0] = x;v[x] = 1;l = r = 0;while (l <= r) {x = q[l];t = g[x].next;while (t != NULL) {y = t->num;if (from[x] != y)if (dis[y] < di[x][y] + dis[x]) {dis[y] = di[x][y] + dis[x];from[y] = x;if (!v[y]) {q[++r] = y;v[y] = 1;}}t = t->next;}++l;v[x] = 0;}z = 0;for (int i = 1;i <= n;++i)if (dis[i] > z) {z = dis[i];x = i;}list[++tot] = x;while (from[x]) {x = from[x];list[++tot] = x;}for (int i = 1;i <= tot;++i) {loc[list[i]] = i;in_tree[list[i]] = 1;}for (int i = 1;i <= tot;++i)for (int j = i + 1;j <= tot;++j)xdis[i][j] = xdis[i][j - 1] + di[list[j - 1]][list[j]];memset(from,0,sizeof(from));for (int i = 1;i <= n;++i)if (!in_tree[i])dist[i] = INT_MAX;for (int i = 1;i <= tot;++i)dfs(list[i],list[i]);ans = INT_MAX;for (int st = 1;st <= tot;++st)for (int en = st;en <= tot;++en) {if (xdis[st][en] > s)break;int te_ans = 0;for (int i = 1;i <= n;++i)if (!in_tree[i]) {if (dist[i] > te_ans)te_ans = dist[i];} else {x = loc[i];if (x < st) {if (dist[i] + xdis[x][st] > te_ans)te_ans = dist[i] + xdis[x][st];}if (x > en) {if (dist[i] + xdis[en][x] > te_ans)te_ans = dist[i] + xdis[en][x];}}if (te_ans < ans)ans = te_ans;}printf("%d\n",ans);return 0; }

轉載于:https://www.cnblogs.com/sephirothlee/archive/2010/10/14/1850939.html

總結

以上是生活随笔為你收集整理的[O(N)的我不会]树网的核的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜视频在线免费观看 | 国产亚洲一区二区三区在线观看 | 国产在线视频91 | 免费看欧美片 | 狼人综合视频 | 华丽的外出在线 | 丰满肉嫩西川结衣av | 日韩精品首页 | 我的公把我弄高潮了视频 | 涩五月婷婷 | 中文字幕一区在线 | 中国老妇性视频 | 久久久久99人妻一区二区三区 | 动漫av网站免费观看 | 亚洲一区不卡 | 高潮白浆女日韩av免费看 | 国产精品影音先锋 | 国产三级免费观看 | 中文在线а√在线8 | 午夜免费激情视频 | 日韩av动漫| 高跟丝袜av | 日韩免费一二三区 | www.黄色.| 人人爽人人爽人人 | 亚洲免费自拍 | 欧美精品第一页 | 国产无遮挡又黄又爽又色 | 免费级毛片 | 色呦呦官网 | 人妻丰满熟妇av无码区免 | 婷婷午夜精品久久久久久性色av | 人人草人人干 | 岛国二区三区 | 人妻精油按摩bd高清中文字幕 | 伊人加勒比 | 91成人看| 国产一精品一aⅴ一免费 | 韩国精品在线观看 | 日韩一道本 | 暖暖成人免费视频 | 少妇一级淫片免费视频 | 亚洲wwwwww| 国产精品二区一区二区aⅴ 一卡二卡三卡在线观看 | 美女脱光衣服让男人捅 | 色天天干| free欧美性69护士呻吟 | 国产激情av | 日韩少妇中文字幕 | 久久久久久天堂 | 中国老头同性xxxxx | 五月导航 | av首页在线观看 | 黄片毛片 | 色干网| 欧美粗又大| 亚洲av无码不卡一区二区三区 | 美女啪啪无遮挡 | 射射综合网 | 超碰超在线 | 日韩成人高清视频在线观看 | 综合久久久久久久久久久 | 女人张开腿让男人桶爽 | 成人h片在线观看 | 欧美在线观看一区二区 | www九九九 | 在线高清观看免费观看 | 97久久免费视频 | 亚洲 小说 欧美 激情 另类 | av制服丝袜 | 久久99精品久久久水蜜桃 | 亚洲高清视频一区二区 | 波多野结衣中文字幕一区二区三区 | 婷婷综合社区 | 极品销魂美女一区二区三区 | 校园春色亚洲色图 | 偷拍一区二区 | 美女羞羞动态图 | 色先锋资源网 | 亚洲情人网 | 久射网 | 中文在线最新版天堂 | 国模吧一区二区三区 | 久久精品6| 黄色网址你懂的 | 天堂√在线 | 99热在线观看 | 精品国产乱码久久久久久浪潮 | 日产mv免费观看 | 欧美一区二区三区成人 | 精品国产欧美一区二区三区成人 | 97人妻一区二区精品免费视频 | 欧美性生交大片免费看 | 亚洲妇女av| 日韩性欧美| 亚洲欧美视频一区二区 | 欧美日韩高清在线观看 | 色综合久久88色综合天天6 | 日本高清在线一区 |