CODEVS 3279 奶牛的健美操

2022-05-28 11:57:12 字數 1654 閱讀 8620

usaco

時間限制: 2 s

空間限制: 256000 kb

題目等級 : 鑽石 diamond

farmer john為了保持奶牛們的健康,讓可憐的奶牛們不停在牧場之間

的小路上奔跑。這些奶牛的路徑集合可以被表示成乙個點集和一些連線

兩個頂點的雙向路,使得每對點之間恰好有一條簡單路徑。簡單的說來,

這些點的布局就是一棵樹,且每條邊等長,都為1。

對於給定的乙個奶牛路徑集合,精明的奶牛們會計算出任意點對路徑的最大值,

我們稱之為這個路徑集合的直徑。如果直徑太大,奶牛們就會拒絕鍛鍊。

farmer john把每個點標記為1..v (2 <= v <= 100,000)。為了獲得更加短

的直徑,他可以選擇封鎖一些已經存在的道路,這樣就可以得到更多的路徑集合,

從而減小一些路徑集合的直徑。

我們從一棵樹開始,fj可以選擇封鎖s (1 <= s <= v-1)條雙向路,從而獲得

s+1個路徑集合。你要做的是計算出最佳的封鎖方案,使得他得到的所有路徑集合

直徑的最大值盡可能小。

farmer john告訴你所有v-1條雙向道路,每條表述為:頂點a_i (1 <= a_i <= v) 

和 b_i (1 <= b_i <= v; a_i!= b_i)連線。

我們來看看如下的例子:

線性的路徑集合(7個頂點的樹)

1---2---3---4---5---6---7

如果fj可以封鎖兩條道路,他可能的選擇如下:

1---2 | 3---4 | 5---6---7

這樣最長的直徑是2,即是最優答案(當然不是唯一的)。

輸入描述 input description

* 第1行: 兩個空格分隔的整數v和s

* 第2...v行: 兩個空格分隔的整數a_i和b_i

輸出描述 output description

* 第1行:乙個整數,表示fj可以獲得的最大的直徑。

樣例輸入 sample input

7 26 7

3 46 5

1 23 2

4 5樣例輸出 sample output

資料範圍及提示 data size & hint

對於50%的資料,滿足v<=100;

對於100%的資料,滿足v<=100000

/*

二分答案+貪心求解

*/#include

#include

using

namespace

std;

const

int n=1e5+10

;struct

node

t[n*2

];int

n,s,tot,ans,head[n];

intf[n],a[n];

void add(int x,int

y)void dfs(int u,int fa,int

num)

f[u]=a[cnt];

}bool check(int

x)int

main()

int l=1,r=n;

while(lprintf(

"%d\n

",l);

return0;

}

codevs 3279 奶牛健美操

usaco 時間限制 2 s 空間限制 256000 kb 題目等級 鑽石 diamond farmer john為了保持奶牛們的健康,讓可憐的奶牛們不停在牧場之間 的小路上奔跑。這些奶牛的路徑集合可以被表示成乙個點集和一些連線 兩個頂點的雙向路,使得每對點之間恰好有一條簡單路徑。簡單的說來,這些點...

Codevs 4246 奶牛的身高

codevs 傳送門 題目描述 description 奶牛們在fj的養育下茁壯成長。這天,fj給了奶牛bessie乙個任務,去看看每個奶牛場中若干只奶牛的身高,由於bessie是只奶牛,無法直接看出第i只奶牛的身高,而只能看出第i只奶牛與第j只奶牛的身高差,其中第i 只奶牛與第j只奶牛的身高差為a...

CodeVS4246 奶牛的身高

注 hj hi a 注意t1的樣例 注意注意注意 重要的事情說三遍。第一行為乙個正整數w,表示有w組資料,即w個奶牛場,需要你判斷。每組資料的第一行為兩個正整數n和m,分別表示對應的奶牛場中的奶牛隻數以及看了多少個對奶牛身高差。接下來的m行表示bessie看m次後傳回給fj的m條資訊,每條資訊佔一行...