題解 P1396 營救 C

2022-05-11 16:32:56 字數 941 閱讀 4303

原題傳送門

這道題目基本就是乙個克魯斯卡爾最小生成樹的模板題,唯一不同的是,這道題目的最終目標不是所有點相連,而是只要s和t相連就可以了。還有就是這道題目求的是最小生成樹中的最大邊權值。

但是,克魯斯卡爾是從最小的邊權值開始考慮的,當s和t第一次連通時考慮的那條邊,就是當前考慮的最大的權值的邊,直接輸出就可以了啊。

**也很簡單,貼一下:

1 #include2

using

namespace

std;

3struct

noded

48 noded(int uu,int vv,int

ww)9

12 }mp[200010

];13

bool

cmp(noded x,noded y)

1417

int fa[5010

];18

intget(int

x)1926}

27bool merge(int x,int

y)28

35else

return

false;36

}37int ans[250010

];38

void

init()

3944}45

intmain()

4654 sort(mp+1,mp+1+p,cmp);

55//

for(int i=1;i<=k;i++)

56//

59init();

60int cnt=0;61

int ans=0;62

for(int i=1;i<=p;i++)

6371

if(cnt==p-1) break;72

}73}74

return0;

75 }

P1396 營救 題解

題目傳送門 這題有好幾種方法可以做,有跑最短路的,有些最小生成樹的。這裡介紹最短路的方法。單源最短路徑,很自然地想到 dijkstra。不過題目要求的是最大值最小,所以鬆弛就要改成 if dis v max dis u e i w dis v max dis u e i w include usin...

洛谷P1396 營救 題解

這其實一看就是乙個最短路的近似模板的題目,但我們要注意到兩個區之間可能會有多條道路,所以說我們只需要在最短路模板的基礎上把加和改為最大值即可,因為題目還說了要求出最後的結果是最大值的最小,所以我們可能會自然而然的想到二分,然而此題跑個dijkstra或spfa甚至是克魯斯卡爾最小生成樹都行。然而據某...

題解 洛谷P1396 營救

題目傳送門 一道並查集 二分的題。刷水題找信心 看到最大的最小就想到二分。那就稍微看看單調性 易得存在乙個滿足題意的擁擠度 w 並且使得 w 1 不滿足題意,而 w 1 滿足題意。稍微想想可知此題滿足二分的單調性,就可以二分 w 來求解。考慮二分的檢查函式,題目只要求我們判斷圖上兩個節點是否連通,那...