ssl1312 旅行 並查集

2021-10-08 08:27:20 字數 2005 閱讀 4734

z小鎮是乙個景色宜人的地方,吸引來自各地的觀光客來此旅遊觀光。z小鎮附近共有n個景點(編號為1,2,3,…,n),這些景點被m條道路連線著,所有道路都是雙向的,兩個景點之間可能有多條道路。也許是為了保護該地的旅遊資源,z小鎮有個奇怪的規定,就是對於一條給定的公路ri,任何在該公路上行駛的車輛速度必須為vi。速度變化太快使得遊客們很不舒服,因此從乙個景點前往另乙個景點的時候,大家都希望選擇行使過程中最大速度和最小速度的比盡可能小的路線,也就是所謂最舒適的路線。

第一行包含兩個正整數,n和m。

接下來的m行每行包含三個正整數:x,y和v。表示景點x到景點y之間有一條雙向公路,車輛必須以速度v在該公路上行駛。

最後一行包含兩個正整數s,t,表示想知道從景點s到景點t最大最小速度比最小的路徑。s和t不可能相同。

如果景點s到景點t沒有路徑,輸出「impossible」。否則輸出乙個數,表示最小的速度比。如果需要,輸出乙個既約分數。

樣例1

421

2134

214

樣例2
331

21012

5238

13

樣例3
321

2223

413

樣例1
impossible
樣例2
5

/4

樣例3
2
hint

【資料範圍】

1 <n

<=

500,1<

=x,y

<=n,

0<v<

30000,x

≠y,0

<m<=

5000

1<n<=500 , 1<=x,y<=n,0<v<30000,x≠y , 0<m<=5000

1<n<=5

00,1

<=x,

y<=n

,0<v

<300

00,x

​=y

,0<m

<=50

00這題也是並查集的乙個應用。

先排好序,然後列舉第一條邊,再列舉其他的邊,直到起點和終點都在同乙個集合裡。然後列舉最大和最小的邊,求出比值,比大小。

最後分別判斷三種輸出條件。

注意double的轉換和路徑壓縮

詳見注釋。

#include

#include

#include

#include

#include

using

namespace std;

int n,m,fa[

5001

],lo,hi;

double mn;

//因為mn跟小數比大小,所以不開double會錯

struct node

a[5001];

intfather

(int x)

voidhb(

int x,

int y)

intcmp

(node l,node r)

intmain()

int q,z;

cin>>q>>z;

sort

(a+1

,a+m+

1,cmp)

;//快速排序不慌

mn=0x7fffffff

;for

(register

int i=

1;i<=m;i++

)int k=i,ff=0;

while(1

) k++;}

if(ff==1)

}}if(mn<

0x7fffffff

)else

}else cout<<

"impossible"

;return0;

}

又水一篇blog好開心。

皮皮 ssl2542 並查集

皮皮通過一次聚會認識了n個妹子。經過仔細的研究皮皮發現了乙個有趣的現象 那就是有m對妹子是互相認識的。然而如果兩個妹子直接或間接地認識 a認識b,b認識c,則a認識c 那麼皮皮就只能在這兩個妹子裡面選乙個來泡。然而空空空空的皮皮想要泡到盡量多的妹子,於是皮皮就開始採取了一系列的行動 每次讓兩個妹子絕...

並查集 家族 (ssl 1896)

合併一些集合,然後判斷某兩個點是否在同乙個集合內 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。第一行...

家譜 SSL 2343 並查集

time limit 10000ms memory limit 65536k total submit 88 accepted 43 case time limit 1000ms description 現代的人對於本家族血統越來越感興趣,現在給出充足的父子關係,請你編寫程式找到 某個人的最早的祖先...