洛谷 P1522 牛的旅行 Cow Tours

2022-05-20 23:33:25 字數 2141 閱讀 8568

思路:編號,然後跑floyd,這是很清楚的。然後記錄每個點在這個聯通塊中的最遠距離。

然後分連通塊,列舉兩個點(不屬於同乙個連通塊的)建邊,計算可能的直徑 dist[i] + dist[j] + dis(i,j)。

當然,這裡有乙個需要注意,(sccno[x]表示屬於哪乙個編號的連通塊,sccdis[x]表示該連通塊的直徑),

在列舉點建邊,形成新的牧場,得到新的可能的直徑時,dist[i] + dist[j] + dis(i,j) >= max(sccdis[sccno[i]],sccdis[sccno[j]]),

這個是一定要成立的,因為新的可能的直徑不可能小於sccdis[sccno[i]] 和 sccdis[sccno[j]](結合題目意思)。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8

using

namespace

std;

910 typedef long

long

ll;11

#define inf 1e11

12#define rep(i, j, k) for (int i = (j); i <= (k); i++)

13#define rep__(i, j, k) for (int i = (j); i < (k); i++)

14#define per(i, j, k) for (int i = (j); i >= (k); i--)

15#define per__(i, j, k) for (int i = (j); i > (k); i--)

1617

const

int n = 160;18

intg[n][n];

19double

f[n][n];

20double

dist[n];

21int

sccno[n];

22int

scccnt;

23double

sccdis[n];

24int

scct;

25int

head[n];

26int

cnt;

27int

n;28

29struct

nodepo[n];

3233

struct

edgee[n*n];

3839

void add(int u,int v,double

w)45

46 inline double dis(node& a,node&b)

4950

void dfs(int

u)56}57

58int

main()

7172

//點的輸入

73 rep(i,1

,n)76

77//

讀圖78 rep(i,1

,n)81

82//

建邊83

double

way;

84 rep(i,1,n) rep(j,i+1

,n) 91}

9293

//連通圖

94 rep(i,1,n) if(!sccno[i])

9899

100//

最短路101 rep(k,1,n) rep(i,1,n) rep(j,1

,n)104

105 rep(i,1

,n)110

}111

112//

連通塊最長直徑

113 rep(i,1

,n)116

117double ans_1 =inf;

118double

tmp;

119 rep(i,1,n) rep(j,1

,n)125

}126

127 printf("

%.6f\n

",ans_1);

128129

getchar();getchar();

130return0;

131 }

洛谷 P1522 牛的旅行 Cow Tours

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

洛谷P1522 牛的旅行 Cow Tours

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

洛谷 P1522 牛的旅行 Cow Tours

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