P1099 樹網的核

2022-04-06 14:38:41 字數 978 閱讀 1534

這裡是o(\(n^2\))的做法

首先可以證明,對於每一條直徑,求出的偏心距是一樣的

怎麼證明?顯然(我不會)

怎樣求樹的直徑?簡單。

貪心:在一條直徑上,顯然選擇的路徑越長越好

實現:首先求出樹上所有點之間的距離(\(n^2\))一直dfs就行

然後找出直徑及直徑經過的點

最後在直徑上貪心的取即可

#include#include#include#includeusing namespace std;

int head[400];

struct be[1000];

int p;

int n,s;

int x,y,z;

int dis[400][400];

int l,r;

int q[400];

int vis[400];

int fl;

void add(int f,int t,int v)

void dfs(int f,int now) }}

void dfs2(int now)

for(int i=head[now];i;i=e[i].ne)

return ;

}int find()

ans=max(li,ans);

} return ans;

}int main()

} li=0;

for(int i=1;i<=n;++i)

} memset(vis,0,sizeof(vis)) ;

p=0;

q[++p]=l;

dfs2(l);

int ans=324;

int sum=0;

for(int i=1;i<=p;++i)//貪心解決

ans=min(ans,find());

} cout

}

洛谷P1099 樹網的核

題目 對於這種題目描述比較長的題,可以考慮簡化題意。簡化後的題意 給定一棵帶邊權無根樹 在其直徑上求出一段長度不超過s的路徑f,使得離路徑距離最遠的點到路徑的距離最短。求最短距離。根據題目範圍,直接暴力floyd求多源最短路徑。然後 n 2 求出直徑和直徑端點。搜尋求出直徑上的點。然後再暴力找出所有...

洛谷 P1099 樹網的核

設t v,e,w t v,e,w 是乙個無圈且連通的無向圖 也稱為無根樹 每條邊到有正整數的權,我們稱tt為樹網 treebetwork 其中vv,ee分別表示結點與邊的集合,ww表示各邊長度的集合,並設tt有nn個結點。路徑 樹網中任何兩結點aa,bb都存在唯一的一條簡單路徑,用d a,b d a...

P2491 消防 P1099 樹網的核

雙倍經驗,雙倍快樂。在乙個樹上選擇一段總長度不超過 s 的鏈使所有點到該鏈距離的最大值最小。輸出這個最小的值。define 以下 s 指鏈或鏈長。證明一下 s 一定處於直徑上。假設它不在直徑上,一定存在直徑的其中乙個端點到 s 的距離大於現在所處支鏈的最大距離。所以 s 不在直徑上一定不優。於是我們...