洛谷P1396 營救

2022-04-02 06:41:29 字數 2122 閱讀 4017

「咚咚咚……」「查水表!」原來是查水表來了,現在**找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門……

媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。

該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然很著急,但是不願意擁擠的人潮衝亂了她優雅的步伐。所以請你幫她規劃一條從s至t的路線,使得經過道路的擁擠度最大值最小。

輸入格式:

第一行四個數字n,m,s,t。

接下來m行,每行三個數字,分別表示兩個區和擁擠度。

(有可能兩個區之間有多條大道相連。)

輸出格式:

輸出題目要求的擁擠度。

輸入樣例#1:

3 3 1 3							

1 2 2

2 3 1

1 3 3

輸出樣例#1:

2
資料範圍

30% n<=10

60% n<=100

100% n<=10000,m<=2n,擁擠度<=10000

題目保證1<=s,t<=n且s<>t,保證可以從s區出發到t區。

樣例解釋:

小明的媽媽要從1號點去3號點,最優路線為1->2->3。

兩種做法:

1.克魯斯卡爾,生成樹

2.二分答案+spfa

#include#include

#include

using

namespace

std;

int n,m,l=0x7fffffff,r=0,s,t,head[10010],num,ans=0x7fffffff

;struct

nodee[

40010

];void insert(int

from,int to,int

v)int q[10010

],h,t;

bool vis[10010

];bool check(int

limit)

}return0;

}int

main()

while(l<=r)

printf(

"%d\n

",ans);

return0;

}

二分答案+bfs

#include#include

#include

using

namespace

std;

#define maxn 10010

struct

nodee[maxn*4

];int

n,m,s,t,fa[maxn];

int cmp(node x,node y)

int find(int

x)int

main()

sort(e+1,e+m+1

,cmp);

for(int i=1;i<=n;i++)fa[i]=i;

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

f1=find(s);f2=find(t);

if(f1==f2)}}

克魯斯卡爾

#include#include

#include

#include

using

namespace

std;

#define maxn 10010

int n,m,s,t,num,head[maxn*2

],ans,dis[maxn];

struct

nodee[maxn*4

];bool

vis[maxn];

void insert(int

from,int to,int

v)bool check(int

x) }}}

if(dis[t]>x)return0;

else

return1;

}int

main()

while(l<=r)

printf("%d

",ans);

}

二分答案+spfa

洛谷 P1396 營救

題目描述 咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然...

洛谷 P1396 營救

題目描述 咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然...

洛谷P1396 營救

咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然很著急,但...