日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【dfs】【树】机器选择

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【dfs】【树】机器选择 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

機器選擇

題目大意:

有一個樹狀的圖,要求安一個點,使這個點到最遠的點的距離最小

原題:

題目描述

自從省隊NOI賽前集訓在scz舉行之后,一個名叫cs1.6.exe的文件開始在機房廣泛使用起來。每天大家都要找神犇小X借移動硬盤,考里面的這個文件。
由于機房里需要考這個文件的人太多了,每天都要花一段時間一個人一個人的去拷貝。小T覺得這實在是太麻煩了,就想找一個一勞永逸的方法。
小T調查了一下,機房有n臺機器,且有局域網,所有機器通過一些網線連接起來,其整個布局是一個樹形結構,即任意兩臺機器間都有且僅有一條路徑。小T想在其中某一臺機器上儲存這個文件,需要的同學就可以直接通過局域網來下載這個文件。
網絡上信息傳輸是需要時間的,我們定義兩臺機器間數據傳輸的時間為連接這兩臺機器的路徑所包含的網線數量。雖然機房里通過局域網傳個文件是很快的,但對于急不可耐的同學們來說,一分一秒都是寶貴的,文件傳輸越快越好。所以小T要選擇一臺機器存儲文件,使得所有機器下載這個文件需要的總時間(即最后一臺機器完成下載的時間)盡可能短。
現在,你需要給出這個最短時間,以便讓小T看看他的決策是否最優。

輸入

第1行:一個整數n。
第2n行:兩個整數u、v,即u、v兩臺機器間有一條網線連接。機器從1n編號。
輸入數據保證是一個連通的樹型結構。

輸出

1行一個整數,即最短的時間。

輸入樣例

5 3 2 2 1 5 2 2 4

輸出樣例

1

說明

【數據范圍】

對于30%的數據,n≤100;
對于50%的數據,n≤1000;
對于100%的數據,2≤n≤100000。

解題思路:

直接暴力搜可以拿50分
想要拿100分就要先求出這棵樹的直徑,然后除以2就可以了

代碼:

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; int n,m,x,y,w,k,ans,p[100005],head[100005]; struct rec {int to,next; }a[200005]; void dfs(int dep,int s) {p[dep]=1;//記錄if (s>ans) ans=s,k=dep;//代替for (int i=head[dep];i;i=a[i].next)if (!p[a[i].to]) dfs(a[i].to,s+1);//搜下去p[dep]=0; } int main() {int size = 256 << 20;char*p=(char*)malloc(size) + size;__asm__("movl %0, %%esp\n" :: "r"(p) );//開棧scanf("%d",&n);for (int i=1;i<n;++i){scanf("%d %d",&x,&y);a[++w].to=y;//存線路a[w].next=head[x];head[x]=w;a[++w].to=x;a[w].next=head[y];head[y]=w;}dfs(1,0);ans=0;dfs(k,0);//求直徑printf("%d",(ans+1)/2);//除以2(加1是因為他是由0開始的) }

總結

以上是生活随笔為你收集整理的【dfs】【树】机器选择的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。