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條資訊,每條資訊佔一行...