LA 5713 秦始皇修路

2022-06-20 21:36:10 字數 1696 閱讀 9869

題意:秦朝有n個城市,需要修建一些道路使得任意兩個城市之間都可以連通。道士徐福聲稱他可以用法術修路,不花錢,也不用勞動力,但只能修一條路,因此需要慎重選擇用法術修哪一條路。秦始皇不僅希望其他道路的總長度b盡量短(這樣可以節省勞動力),還希望法術連線的兩個城市的人口之和a盡量大,因此下令尋找乙個使得a/b最大的方案。你的任務是找到這個方案。

任意兩個城市之間都可以修路,長度為兩個城市之間的歐幾里德距離。

思路:先計算出最小生成樹,之後用法術修的路肯定在最小生成樹當中,那麼之後我們就可以列舉邊u-v。

當然,需要預處理,像最小生成樹一樣,計算出u和v之間唯一路徑上的最大權maxcost[u][v]。

1 #include2 #include3 #include4 #include5 #include

6 #include7 #include8 #include9 #include10

using

namespace

std;

11 typedef long

long

ll;12

const

int maxn=1000+5;13

14struct

node

1522 }edge[maxn*maxn];

2324

intn;

25int

cnt;

26int

p[maxn];

27int

x[maxn],y[maxn];

28int

num[maxn];

29 vector g[maxn]; //

儲存最小生成樹中結點u的鄰接結點

30 vector c[maxn]; //

c[u][i]表示結點u和和結點g[u][i]之間的邊權

3132

double maxcost[maxn][maxn]; //

u,v兩點之間的最大邊權

33 vectornodes;

3435

int find(int

x)36

3940

double

mst()

4157}58

return

tot_q;59}

6061

void dfs(int u,int fa,double cost) //

無根樹轉有根樹,計算出u,v兩點之間路徑的最大邊權

6268

nodes.push_back(u);

69for(int i=0;i)

7074}75

76int

main()

7786

for(int i=0;i)

8796}97

double tot=mst();

98 memset(maxcost,0,sizeof

(maxcost));

99nodes.clear();

100 dfs(0,-1,0

);101

double ans=-1

;102

for(int i=0;i)

103108

}109 printf("

%.2lf\n

",ans);

110}

111return0;

112 }

mysql5 7 13初次修改密碼

安裝 mysql5.7.13綠色版 後,第一次嘗試使用預設使用者名稱root登陸mysql就以下問題 解決方案 1.在mysql安裝目錄下的.ini檔案末尾添上一句 skip grant tables,儲存。ini配置詳見 2.執行命令 net stop mysql net start mysql ...

5 7 1 3 Global 物件的屬性

global物件還包含了一些屬性,例如,特殊的值undefined nan以及infinity都是global物件的屬性。此外,所有原生引用型別的建構函式,像object和function,也都是global物件的屬性。下表給出了global物件的所有屬性。屬 性 說 明 屬 性 說 明 undef...

HDU5713 K個聯通塊

有一張 n n le14 個點,m 條邊無重邊的無向圖,求有多少個邊集,使得刪掉邊集裡的邊後,圖里恰好有 k 個連通塊。乙個顯然的動態規劃是,f 表示點集為 s 分成 i 個連通塊的方案數。轉移什麼的都很顯然,關鍵是如何求 f 萬事開頭難!f 的含義是刪去 s 中若干條邊使得新圖仍然連通的方案數。我...