p1082叢林探險
東非大裂谷中有一片神秘的叢林,是全世界探險家的樂園,著名黃**探險家bb一直想去試試。正好我國科學家2023年4月將首次對東非大裂谷進行科考,bb決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖:該地圖上有若干安全點(包括入口點和出口點),並將這些安全點編號為1、2、…、n;如果乙個安全點和另乙個安全點有一條路直接相通,則用一條邊標示;該圖是乙個連通圖(任意兩點間有至少一條路徑),地圖上每條路的長度和走這條路需要耗費的體力都做了標示。
kk行走速度為1,並知道自己體力為k。他想知道根據自己的體力情況能否成功地穿過叢林。
第一行兩個整數n(<=5000) m(<=40000),分別表示地圖上安全點的個數和邊的數目;
第2行至第m+1 行每行4個整數x y c d,x、y表示有直接相聯邊的兩個點的編號,c走這條路需要耗費的體力;d表示邊的長度;(其中150<=c,d<=300)
第m+2行兩個整數s t,分別表示安全的入口點和出口點的編號;
第m+3行乙個整數k,表示bb的體力值;(k<10^9)
同一行上的多個資料用空格隔開。
乙個整數,如果bb能安全地從如入口穿過叢林到達出口,輸出最短時間,否則輸出-1
4 5
1 2 2 3
1 3 3 5
1 4 7 10
2 4 4 6
3 4 2 6
1 4
5
11各個測試點1s
【思路】
搜尋+剪枝。
n+m=45000,可以考慮搜尋st之間的每一條路徑,選擇最短的一條。
剪枝:最優性剪枝:如果dist>ans則剪枝。
可行性剪枝:[最短路]預處理出點u到t的最小體力耗費d[u],如果blood需要注意的是方案的不可行最好在列舉v的時候判斷,否則的話:我試了一下,乙個tle乙個wa。(這個wa也是很奇妙的=-=)
【**】
1 #include2 #include3 #include4using
namespace
std;56
const
int maxn = 5000+10 , maxm=40000+10;7
const
int inf=1
<<30;8
struct
edgee[2*maxm];
11int en=-1
, front[maxn];
1213
intn,m,k;
1415 inline void addedge(int u,int v,int c,int
d) 18
intd[maxn];
19void spfa(int
s) 36}37
}38}39
}4041int ans=inf;
42int
vis[maxn];
43int
s,t;
44void dfs(int u,int blood,int
dist)
46for(int i=front[u];i>=0;i=e[i].next)54}
55int
main()
64 scanf("
%d%d%d
",&s,&t,&k);
65spfa(t);
66if(d[s]>k) printf("
-1\n");
67else
6874
return0;
75 }
Vijos T 1082 叢林探險
東非大裂谷中有一片神秘的叢林,是全世界探險家的樂園,著名黃 探險家bb一直想去試試。正好我國科學家2005年4月將首次對東非大裂谷進行科考,bb決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖 該地圖上有若干安全點 包括入口點和出口點 並將這些安全點編號...
tyvj 叢林探險
東非大裂谷中有一片神秘的叢林,是全世界探險家的樂園,著名黃 探險家bb一直想去試試。正好我國科學家2005年4月將首次對東非大裂谷進行科考,bb決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖 該地圖上有若干安全點 包括入口點和出口點 並將這些安全點編號...
qsort函式使用 P1082找朋友
描述 description 童年的我們,對各種事物充滿了好奇與嚮往。這天,小朋友們對數字產生了興趣,並且想和數字交朋友。可是,怎麼分配這些數字才能使得每個小朋友都唯一地找到乙個數字朋友呢?小朋友說 咱們按自己名字的字典序先後,依次選擇乙個剩餘的最小的數字當朋友。好麼?小朋友十分贊同。於是,大家都同...