1125 牛的旅行

2021-10-09 11:47:49 字數 2279 閱讀 3860

農民john的農場裡有很多牧區,有的路徑連線一些特定的牧區。

一片所有連通的牧區稱為乙個牧場。

但是就目前而言,你能看到至少有兩個牧區不連通。

現在,john想在農場裡新增一條路徑(注意,恰好一條)。

乙個牧場的直徑就是牧場中最遠的兩個牧區的距離(本題中所提到的所有距離指的都是最短的距離)。

考慮如下的兩個牧場,每乙個牧區都有自己的座標:

1.png

圖 1 是有 5 個牧區的牧場,牧區用「*」表示,路徑用直線表示。

圖 1 所示的牧場的直徑大約是 12.07106, 最遠的兩個牧區是 a 和 e,它們之間的最短路徑是 a-b-e。

圖 2 是另乙個牧場。

這兩個牧場都在john的農場上。

john將會在兩個牧場中各選乙個牧區,然後用一條路徑連起來,使得連通後這個新的更大的牧場有最小的直徑。

注意,如果兩條路徑中途相交,我們不認為它們是連通的。

只有兩條路徑在同乙個牧區相交,我們才認為它們是連通的。

現在請你程式設計找出一條連線兩個不同牧場的路徑,使得連上這條路徑後,所有牧場(生成的新牧場和原有牧場)中直徑最大的牧場的直徑盡可能小。

輸出這個直徑最小可能值。

輸入格式

第 1 行:乙個整數 n, 表示牧區數;

第 2 到 n+1 行:每行兩個整數 x,y, 表示 n 個牧區的座標。每個牧區的座標都是不一樣的。

第 n+2 行到第 2*n+1 行:每行包括 n 個數字 ( 0或1 ) 表示乙個對稱鄰接矩陣。

例如,題目描述中的兩個牧場的矩陣描述如下:

a b c d e f g h

a 0 1 0 0 0 0 0 0

b 1 0 1 1 1 0 0 0

c 0 1 0 0 1 0 0 0

d 0 1 0 0 1 0 0 0

e 0 1 1 1 0 0 0 0

f 0 0 0 0 0 0 1 0

g 0 0 0 0 0 1 0 1

h 0 0 0 0 0 0 1 0

輸入資料中至少包括兩個不連通的牧區。

輸出格式

只有一行,包括乙個實數,表示所求答案。

數字保留六位小數。

資料範圍

1≤n≤150,

0≤x,y≤105

輸入樣例:

810 10

15 10

20 10

15 15

20 15

30 15

25 10

30 10

01000000

10111000

01001000

01001000

01110000

00000010

00000101

00000010

輸出樣例:

22.071068

#include

#include

#include

#include

#define x first

#define y second

using

namespace std;

typedef pair<

double

,double

> pdd;

const

int n =

155;

const

double inf =

1e20

;int n;

pdd q[n]

;double d[n]

[n];

double maxd[n]

;char g[n]

[n];

double

get_dist

(pdd a, pdd b)

intmain()

double r2 = inf;

for(

int i =

0; i < n; i ++

)//列舉一下哪兩個不同連通塊的點相連

for(

int j =

0; j < n; j ++)if

(d[i]

[j]> inf /2)

r2 =

min(r2, maxd[i]

+ maxd[j]

+get_dist

(q[i]

, q[j]))

;printf

("%.6lf\n"

,max

(r1, r2));

return0;

}

牛的旅行 Floyed Warshall

原題鏈結傳送門 d es crip tion description descri ptio n農民john的農場裡有很多牧區。有的路徑連線一些特定的牧區。一片所有連通的牧區稱為乙個牧場。但是就目前而言,你能看到至少有兩個牧區不連通。這樣,農民john就有多個牧區了。john想在農場裡新增一條路徑 ...

牛的旅行 題解

農民joh njohn john 的農場裡有很多牧區。有的路徑連線一些特定的牧區。一片所有連通的牧區稱為乙個牧場。但是就目前而言,你能看到至少有兩個牧區不連通。這樣,農民joh njohn john 就有多個牧區了。j oh njohn john 想在農場裡新增一條路徑 注意,恰好一條 對這條路徑有...

洛谷1522 牛的旅行

洛谷1522 牛的旅行 題目描述 農民 john的農場裡有很多牧區。有的路徑連線一些特定的牧區。一片所有連通的牧區稱為乙個牧場。但是就目前而言,你能看到至少有兩個牧區通過任何路徑都不連通。這樣,farmer john就有多個牧場了。john想在牧場裡新增一條路徑 注意,恰好一條 對這條路徑有以下限制...