TYVJ1248(叢林探險)

2021-05-27 06:40:32 字數 1781 閱讀 2499

演算法:dfs

tyvj上標明的型別是最短路,其實這道題dfs完全可以解決。

首先要注意本題是無向圖,邊要存兩遍。

為了解決每兩個點可能有多邊的情況,所以使用邊表進行儲存。

有兩種優化:

1:當當前的距離大於ans時則剪。

2:當體力小於0時則剪。

program p1248;

const

maxn=5000;

maxm=80000;

type

atp=record

y,next,dis,hp:longint;

end;

var n,m,st,ed,k,tot,ans:longint;

map:array [0..maxm] of atp;

first:array [0..maxn] of longint;

b:array [0..maxn] of boolean;

procedure init;

var i,x,y,hp,dis:longint;

begin

readln(n,m);

for i:=1 to m do

begin

readln(x,y,hp,dis);

inc(tot);

map[tot].y:=y;

map[tot].next:=first[x];

first[x]:=tot;

map[tot].dis:=dis;

map[tot].hp:=hp;

inc(tot);

map[tot].y:=x;

map[tot].next:=first[y];

first[y]:=tot;

map[tot].dis:=dis;

map[tot].hp:=hp;

end;

readln(st,ed);

readln(k);

b[st]:=true;

ans:=maxlongint;

end;

procedure dfs(x,dis,hp:longint);

var t,y:longint;

begin

if dis>ans then exit;

if hp<0 then exit;

if x=ed then

begin

if dis0 do

begin

y:=map[t].y;

if not b[y] then

begin

b[y]:=true;

inc(dis,map[t].dis);

dec(hp,map[t].hp);

dfs(y,dis,hp);

b[y]:=false;

dec(dis,map[t].dis);

inc(hp,map[t].hp);

end;

t:=map[t].next;

end;

end;

begin

assign(input,'p1248.in'); reset(input);

assign(output,'p1248.out'); rewrite(output);

init;

dfs(st,0,k);

if ans=maxlongint then writeln(-1) else writeln(ans);

close(input); close(output);

end.

1 24學習計畫

1 在我們第乙個課題的基礎上。改寫定時器中斷的內容,做到每隔1s閃爍,再每隔2s閃爍,再隔3s閃爍,然後一直這樣迴圈,其他的led還有示波器都和原來的要求一樣。一遍一遍的對照著led0開始計算led1是不是已經達到了迴圈的要求。1 每隔一秒閃爍 則週期為2 每隔2s閃爍則週期為4 每隔3s閃爍,週期...

tyvj 叢林探險

東非大裂谷中有一片神秘的叢林,是全世界探險家的樂園,著名黃 探險家bb一直想去試試。正好我國科學家2005年4月將首次對東非大裂谷進行科考,bb決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖 該地圖上有若干安全點 包括入口點和出口點 並將這些安全點編號...

12 4 友元函式

類中的私有成員和保護成員是只能類內訪問,但在某些特殊情況,我們希望類外也能訪問,這就要用到友元技術。在類中宣告該函式並在前面加上friend關鍵字,這樣函式就可以暢通無阻地訪問私有和保護成員了。12.4.1 全域性函式做友元 include include using namespace std c...