BZOJ1999 noip2007樹網的核

2021-08-10 12:29:41 字數 2183 閱讀 6389

time limit: 10 sec  memory limit: 64 mb

submit: 1756  solved: 536

[submit][status][discuss]

設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。樹網的直徑:樹網中最長的路徑稱為樹網的直徑。對於給定的樹網t,直徑不一定是唯一的,但可以證明:各直徑的中點(不一定恰好是某個結點,可能在某條邊的內部)是唯一的,我們稱該點為樹網的中心。偏心距ecc(f):樹網t中距路徑f最遠的結點到路徑f的距離,即 。任務:對於給定的樹網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 21 2 5

2 3 2

2 4 4

2 5 3

5好難的一道題, 原題我打的暴力拿了84分, 也是看了題解才會做的。

首先多條直徑隨便選一條直徑即可, 我不會證明= =

容易得知離直徑上的點最遠的點一定是直徑的乙個端點。

先處理出直徑的兩個端點, 求出偏心距最小的核。

然後我們再處理每個不在直徑的點到直徑的距離取個max就可以了。

如果這個點到 核 的距離 小於等於 直徑的乙個端點到核的距離, 就不管。

不然就 說明 核 覆蓋了直徑上那個分叉點, 可以用反證法證出。

如圖所示, 顯然直徑上所有分叉點到其他點距離小於 x 到 核的距離。

然後貼**

#include #include #define min(a, b) ((a) < (b) ? (a) : (b))

#define max(a, b) ((a) > (b) ? (a) : (b))

#define n 500005

struct noded[n*2];

int fa[n], dis[n], h[n], cnt, x, y, v[n], ans = 2147483647;

void cr(int a, int b, int c)

void dfs(int a) }}

int main()

dfs(1);

memset(fa, 0, sizeof(fa));

for(i = 1; i <= n; i++) if(dis[x] < dis[i]) x = i;

dis[x] = 0;

dfs(x);

for(i = 1; i <= n; i++) if(dis[y] < dis[i]) y = i;

for(i = j = y; i; i = fa[i])

for(i = y; i; i = fa[i]) v[i] = 1;

for(i = y; i; i = fa[i]) dis[i] = 0, dfs(i);

for(i = 1; i <= n; i++) ans = max(ans, dis[i]);

printf("%d", ans);

return 0;

}

NOIP1999 攔截飛彈

時間限制 1 sec 記憶體限制 64 mb 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔...

NOIP1999 攔截飛彈

1044 攔截飛彈 1999年noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 檢視執行結果 題目描述 description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但...

攔截飛彈noip1999

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度 雷達給出...