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 2
6 7
3 4
6 5
1 2
3 2
4 5
樣例輸出 sample output
2
資料範圍及提示 data size & hint
對於50%的資料,滿足v<=100;
對於100%的資料,滿足v<=100000
/*二分答案+樹形dp
codevs 乙個點re 估計是爆棧
bzoj 過了
*/#include
#include
#include
#include
#define maxn 100010
using
namespace
std;
intn,s,topt,l,r,ans,sum;
intfirst[maxn];
priority_queue
q[maxn];
struct
edge
e[maxn*2
];int
init()
while(c>='
0'&&c<='9')
return x*f;
}void add(int x,int
y)int dfs(int x,int
from,int
limit)
while(1
)
}return
q[x].top();
}int judge(int
x)int
main()
l=0,r=n;
while(l<=r)
else l=mid+1
; }
printf(
"%d\n
",ans);
return0;
}
/*陣列版本 竟然跑得更快 而且不爆棧
*/#include
#include
#include
#include
#include
#define maxn 100010
using
namespace
std;
intn,s,topt,l,r,ans,sum;
intfirst[maxn];
intf[maxn],a[maxn];
struct
edge
e[maxn*2
];int
init()
while(c>='
0'&&c<='9')
return x*f;
}void add(int x,int
y)void dfs(int x,int
from,int
limit)
for(int i=first[x];i;i=e[i].next)
sort(a+1,a+tot+1
);
while(tot>0&&a[tot]+a[tot-1]>limit)tot--,sum++;
f[x]=a[tot];
}int judge(int
x)int
main()
l=0,r=n;
while(l<=r)
else l=mid+1
; }
printf(
"%d\n
",ans);
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條資訊,每條資訊佔一行...