演算法: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...