題目大意:
bt一天晚上發現
叢林的每棵樹上都有些漿果,bt想把這些果子都拿回去做研究,然而bt認為一次拿太多會很不爽,所以他想知道,他從營地到準備考察的地方,一每棵樹上的漿果最大值的最小值。當然,bt的早餐能量有限,而從一棵樹到另一棵樹所需能量是已知的,bt要保證來回所需能量小於等於早餐所提供的能量。
輸入:第一行5個正整數,n(1<=n<=10000),m(1<=m<=25000),s,t,st。分別表示有n棵樹,m條路徑,從營地s到考察處t,早餐的能量為st。
接下來有n行,每行1個正整數,fi。表示第i棵樹上的漿果重量。 再接下來有m行,每行3個正整數,x,y,d (1<=x,y<=n)。表示第x棵樹和第y棵樹之間可通行,且所需能量為d。
輸出:一行,路徑上漿果重量最大值的最小值。若bt無法從營地和考察地間走乙個來回,則輸出-1.
樣例輸入
4 4 2 3 8856102 1 2
2 4 1
1 3 4
3 4 3
樣例輸出
10
所有數<
2^63
淼淼淼淼!
一道赤裸裸的二分外加最短路!
二分列舉答案,刪掉大於答案 的點即可。
再spfa,合法r左移,不合法l右移。
於是.....
184826
2167
2017王譽達
評測通過
10065 ms
7.98 mb
pascal
2945 bytes
2017-08-06 16:02:41
注意細節!細節!細節!謹慎處理!
標程(請勿抄襲):
vari:longint;
j,k,m,n,o,p,l,s,t,r,mid,x,y,c,head,tail,q1:int64;
b,f:array[1..100000,1..3] of int64;
q,a,h,long:array[1..100000] of int64;
bz,spfa:array[1..100001] of boolean;
procedure insert(x,y,z:longint);
begin
inc(t);
f[t,1]:=y;
f[t,2]:=q[x];
f[t,3]:=z;
q[x]:=t;
end;
function pd(a:longint):longint;
begin
if a=0 then exit(maxlongint) else exit(a);
end;
begin
assign(input,'max.in');reset(input);
assign(output,'max.out');rewrite(output);
readln(n,m,x,y,c);
c:=c div 2;
for i:=1 to n do readln(a[i]);
for i:=1 to m do begin
readln(o,p,q1);
insert(o,p,q1);
insert(p,o,q1);
end;
l:=0;r:=9223372036854775806; mid:=(l+r) div 2;
while l<=r do begin
fillchar(bz,sizeof(bz),true);
for i:=1 to n do begin
if a[i]>mid then bz[i]:=false;
long[i]:=0;
end;
if (bz[x]=false) or (bz[y]=false) then begin
l:=mid+1;
mid:=(l+r) div 2;
//if mid*2<>l+r then mid:=mid+1;
continue;
end;
fillchar(spfa,sizeof(spfa),true);
head:=0;tail:=1;h[1]:=x;spfa[x]:=false;
while head0 do begin
if bz[f[k,1]]=false then begin
k:=f[k,2];
continue;
end;
if long[h[head]]+f[k,3]0) and (long[y]<=c) then begin
r:=mid-1;
mid:=(l+r) div 2;
//if mid*2<>l+r then mid:=mid+1;
end else begin
l:=mid+1;
mid:=(l+r) div 2;
//if mid*2<>l+r then mid:=mid+1;
end;
end;
///writeln(long[y]);
// if (long[y]=0) or (long[y]>c) then inc(mid);
if mid*2<>l+r then inc(mid);
writeln(mid);
close(input);close(output);
end.
小結 普及模擬3 26
普及模擬 石子遊戲 普及模擬 公共子串 普及模擬 射擊 普及模擬 過河 60 100 0 50 210 還可以,就是第一題有點可惜,沒有想到那個詭異的優化.t1 簡單地說就是它說什麼,你打什麼.打錯了怪我嗦 開乙個棧,把顏色相同的壓在一起 這樣就可更加快速的進行 各種神奇的操作 t2 裸題裸得也太嚴...
17 05 14 普及模擬 題解
第一題 無限劍製 很簡單的模擬題,求出這個西格瑪就好,資料規模也不大 第二題 魔法陣 也很簡單,只是這題目給參加過2016noip的我著實嚇了一跳。汗 簡單說,也是模擬 兩個陣列,兩個迴圈,改變方陣中的元素位置 第三題 倒水 題目挺長的,唬人 然而仔細閱讀整個題目就知道,其實是個模擬 資料規模不大,...
普及模擬 好數
對於乙個正整數x,如果把x化成二進位制數後,如果x的二進位制數至少有三個連續的1或者至少有3個連續的0 不能有前導0 那麼x就是 好數 例如8就是 好數 因為8對應的二進位制數是1000,有三個連續的0。整數15也是 好數 因為15對應的二進位制數是1111,也有三個連續的1。整數27就不是 好數 ...