這道題讓筆者想起了通往奧格瑞瑪的道路這道題,可以說是有異曲同工之妙了。首先題目明確說明了,求最大值最小。一般這樣的就與二分答案有關,於是我們記錄下來每條邊的長度,答案一定是這些長度中的乙個,然後將各邊的長度排序,二分答案就行了(相當於套乙個二分答案的板子和乙個dijkstra的板子)。細節處理在**注釋上。
當然本題還有並查集等其它解法,這個隨後補上。
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace std;
const
int maxn=
1000005
;const
int inf=
0x3f3f3f3f
;
ll d[maxn]
;bool done[maxn]
;int n,m;
struct edge
edge()
:from(0
),to(
0),dist(0
)};vector edges;
vector edges2;
//check要改邊,所以要備份
vector<
int> mp[maxn]
;vector<
int> mp2[maxn]
;void
addedge
(int from,
int to,
int dist)
void
addedge2
(int from,
int to,
int dist)
struct heapnode
heapnode()
:num(0
),dis(0)
bool
operator
<
(const heapnode& buf)
const};
priority_queue q;
void
dijkstra
(int s)}}
}int pos;
int s,t;
//本題很像通往奧格瑞瑪的道路
int edg[maxn]
;//把每條邊長度儲存起來,再排序,然後二分答案,每次在dijkstra的每條邊中做處理,把比二分的答案長的邊全部「封鎖掉」
int cnt;
int ans;
void
init()
}bool
check
(int cur)
dijkstra
(s);
if(d[t]
>=inf)
else
}int
main()
int l=
1,r=cnt;
sort
(edg+
1,edg+cnt+1)
;while
(l<=r)
else l=mid+1;
}printf
("%d"
,ans)
;return0;
}
hiho week 38 P1 二分 二分答案
time limit 10000ms case time limit 1000ms memory limit 256mb 描述 在上一回和上上回里我們知道nettle在玩 艦 nettle在整理好艦隊之後終於準備出海撈船和敵軍交戰了。在這個遊戲裡面,海域是n個戰略點 編號1.n 組成,如下圖所示 其...
二分查詢與二分答案
主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...
二分查詢和二分答案
1.解釋 優點 查詢速度快。缺點 待查表為有序表。4.時間複雜度 o log n 5.示例 p2249查詢 include include using namespace std long long n,m,a 1000005 b 100005 l,r,mid,cnt,x intmain for i...