奶牛健美操(codevs 3279)

題目描述?Description

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

/*二分答案+貪心記錄以每個節點為根的子樹的每條鏈的長度,如果最長鏈和次長鏈的和大于二分出的答案,就減去最長鏈。 
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define N 100010
using namespace std;
int head[N],f[N],g[N],n,m,sum;
struct node
{int v,pre;
};node e[N*2];
void add(int i,int x,int y)
{e[i].v=y;e[i].pre=head[x];head[x]=i;
}
bool cmp(int s1,int s2)
{return s1>s2;
}
void dfs(int x,int fa,int mid)
{for(int i=head[x];i;i=e[i].pre)if(e[i].v!=fa)dfs(e[i].v,x,mid);int cnt=0;for(int i=head[x];i;i=e[i].pre)if(e[i].v!=fa)g[++cnt]=f[e[i].v]+1;sort(g+1,g+cnt+1,cmp);if(cnt==0){f[x]=0;return;}else if(cnt==1){if(g[1]<=mid)f[x]=g[1];else sum++,f[x]=0;return;}else{int i=2;for(;i<=cnt;i++)if(g[i-1]+g[i]<=mid)break;else sum++;if(i==cnt+1&&g[cnt]>mid)sum++;f[x]=g[i-1];return;}
}
bool check(int mid)
{memset(f,0,sizeof(f));memset(g,0,sizeof(g));sum=0;dfs(1,0,mid);if(sum>m)return false;return true;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);add(i*2-1,x,y);add(i*2,y,x);}int l=0,r=n-1,ans=n-1;while(l<=r){int mid=(l+r)>>1;if(check(mid)){r=mid-1;ans=mid;}else l=mid+1;}printf("%d",ans);return 0;
}

?

轉載于:https://www.cnblogs.com/harden/p/6048919.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373520.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373520.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373520.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nginx 實現網站 http、https 配置

在 nginx conf 目錄下新建 ssl 目錄&#xff0c;將申請的 ssl證書文件拷貝到此處&#xff1a; 修改 nginx 配置文件使支持 https&#xff0c;修改如下&#xff1a; server {listen 80;listen 443 ssl;ssl_certificate ssl/cert-xuexiyuan.cn.crt;ssl_certificat…

實用垃圾收集,第1部分–簡介

這是我打算寫的一系列博客文章的第一部分&#xff0c;其目的是解釋垃圾回收在現實世界中的工作方式&#xff08;特別是在JVM中 &#xff09;。 我將介紹一些我認為對于充分理解垃圾收集對于實際目的是必要的理論&#xff0c;但是將其降至最低。 其動機是在各種情況下&#xff0…

數據結構之楊氏矩陣

轉自&#xff1a; http://blog.csdn.net/jiyanfeng1/article/details/8189228轉載于:https://www.cnblogs.com/neversayno/p/5256262.html

mysql 導出 沒有函數_沒有MYSQL FILE函數的CSV導出

構建最佳CSV。你可以按照以下方式做。$filename data.csv;$csv_terminated "\n";$csv_separator ",";$csv_enclosed ";$csv_escaped "\\";$results array(1,2,3);// value$schema_insert ;$header array(a,b,c);// headerfor ($i 0…

使用jdk壓縮war包

首先安裝jdk 壓縮 ..../jdk/bin/jar -cvf file.war file 解壓 ..../jdk/bin/jar -xvf file.war 轉載于:https://www.cnblogs.com/chongchong88/p/6049690.html

MongoDB查詢性能分析—— explain 操作返回結果詳解

MongoDB 提供 db.collection.explain(), cursort.explain() 及 explain 命令獲取查詢計劃及查詢計劃執行統計信息。 explain 結果將查詢計劃以階段樹的形式呈現。 每個階段將其結果&#xff08;文檔或索引鍵&#xff09;傳遞給父節點。 葉節點訪問集合或索引。 中間節點操縱由…

.deb包的安裝方法

deb是Debian linux的安裝格式&#xff0c;跟redhat的rpm非常相似&#xff0c;最基本的安裝命令是&#xff1a; dpkg -i file.deb dpkg是Debian Package的簡寫&#xff0c;是為Debian專門開發的管理系統套件&#xff0c;方便軟件的安裝&#xff0c;更新和移除。所有源自Debian的…

html回復評論_3天內看了3000多篇《哈佛商業評論》,挑出來最有用的分享下

上次分享過一個工具&#xff1a;一鍵批量下載公眾號歷史消息&#xff08;后臺回復001獲取&#xff09;。我把《哈佛商業評論》的歷史文章&#xff0c;全部爬了下來。該雜志被全球商業譽為“管理圣經”。我最感興趣的一部分是&#xff1a;個人管理。先搜索關鍵詞&#xff1a;&qu…

Java中的高性能庫

越來越多的庫被描述為高性能&#xff0c;并且有支持該要求的基準。 這是我所知道的選擇。 Disruptor庫 – http://code.google.com/p/disruptor/ LMAX旨在成為世界上最快的交易平臺。 顯然&#xff0c;為了實現這一目標&#xff0c;我們需要做一些特殊的事情&#xff0c;以通過…

Linux 命令行上執行多個命令(分隔符簡介使用)

Linux 系統可以在一個命令行上執行多個命令&#xff0c;相應的命令行的分隔符簡介及使用如下&#xff1a; ; 如果命令被分號(;)所分隔&#xff0c;那么命令會連續的執行下去&#xff0c;就算是錯誤的命令也會繼續執行后面的命令。示例如下&#xff1a; ls /home/; ls /etc/i…

codeforces 732/D 二分

給出考試時間和考試需要準備的時間&#xff0c;問最早考完所有科目的時間 二分答案 NlogN 二分抄神犇的寫法 感覺挺舒服的嘻嘻嘻 1 #include<bits/stdc.h>2 using namespace std;3 const int MAXN1e55;4 int N,M,d[MAXN],w[MAXN],cnt[MAXN];5 void read(int &x){6 …

XML基礎(二)

XML命名規則&#xff1a; ①名稱可以含字母、數字以及其他的字符 ②名稱不能以數字或標點符號開始 ③名稱不能以“xml”開始 ④名稱不能包含空格 ⑤盡量避免"-", "." ,":"等字符 xml元素是可擴展的。 XML屬性&#xff1a; 屬性提供有關元素的額外…

NoSQLBooster for MongoDB 中跨庫關聯查詢

? 使用 MongoDB 是我們常常會遇到一些特殊的需求需要跨庫關聯查詢&#xff0c;比如訂單明細缺商品重量需要補商品重量&#xff0c;而商品重量數據又在商品庫中&#xff0c;這事就需要跨庫關聯操作&#xff0c;示例代碼如下&#xff1a; // 使用 order 庫&#xff0c;注意語句…

網頁版的svn怎樣同步代碼_學會使用Hdlbits網頁版Verilog代碼仿真驗證平臺

大家推薦一款網頁版的 Verilog代碼編輯仿真驗證平臺&#xff0c;這個平臺是國外的一家開源FPGA學習網站&#xff0c;通過“https://hdlbits.01xz.net/wiki/Main_Page”地址鏈接進入網頁&#xff0c;在該網頁上可以進行Verilog代碼的編寫、綜合&#xff0c;而且最后還能夠仿真出…

遇到的零碎問題

Show()時&#xff0c;其他窗口仍可響應&#xff0c;ShowDialog()時其他窗口無響應。 在public Form1()中使用messagebox會先出現信息窗口&#xff0c;再顯示主窗體&#xff0c;故考慮加入了start按鈕。 play()會被打斷&#xff0c;PlaySync&#xff08;&#xff09;會播放完再執…

Tomcat上具有JAX-WS的Web服務

讓我們假設一家企業正在一個集中式系統中維護用戶身份驗證詳細信息。 我們需要創建一個AuthenticationService&#xff0c;它將獲取憑據&#xff0c;對其進行驗證并返回狀態。 其余的應用程序將使用AuthenticationService對用戶進行身份驗證。 創建AuthenticationService接口&a…

Python的下載及安裝

1、官網下載地址&#xff1a;https://www.python.org/downloads/ 2、python設置環境變量&#xff1a; 在系統變量里添加Python的安裝位置 3、在cmd里輸入python里即可轉載于:https://www.cnblogs.com/fun0623/p/5257573.html

MongoDB 字段拼接 $concat(aggregation)

$concat 拼接字符串操作&#xff0c;返回拼接后的字符串。語法格式如下&#xff1a; { $concat: [ <expression1>, <expression2>, ... ] }參數可以是任何有效的表達式&#xff0c;只要它們解析為字符串即可。 有關表達式的更多信息&#xff0c;請參閱表達式。 示…

cmake mysql 編譯參數_Cmake-MySQL編譯參數說明

Cmake-MySQL編譯參數說明(來源于MySQL官方手冊)https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.htmlFormats Description DefaultIntroduced Removed ##格式描述默認導入刪除BUILD_CONFIG Use same build options as official releases ##b使用相同…

動態給H5頁面綁定數據,基本萬能無錯誤!

此為原創&#xff0c;轉載請注明出處&#xff01; /* * 共通用綁定頁面數據用方法 * * param bingData 需要綁定的數據 * * return 無 * */function commonBindData(bingData) { // 取得需綁定的json數據 var jsonArray eval("(" bingData ")"); // …